데브허브 | DEVHUB | THIS Is How to Select Units in Your Next Godot RTS! ⭐️THIS Is How to Select Units in Your Next Godot RTS! ⭐️
- 선택 가능한 유닛들을 특정 노드 그룹으로 묶고, 2D/Control 기반의
UnitSelector 노드를 생성하여 모든 선택 로직과 UI를 관리합니다. 🏷️
- 마우스 클릭 및 드래그 이벤트를 감지하여 화면에 반투명한 녹색 사각형 선택 박스를 실시간으로 그리고, 마우스 버튼을 놓으면 사라지게 합니다. 🟩
- 3D 공간의 유닛 위치를 3D 카메라의
unproject_position 메서드를 사용하여 2D 화면 좌표로 변환하고, 이 2D 좌표가 선택 박스 내부에 있는지 확인하여 유닛을 선택/해제합니다. ↔️
- 모든 유닛에 레이캐스트를 사용하는 대신, 월드를 덮는 평면(예: 물 평면)에 단일 레이캐스트를 수행하여 3D 클릭 지점을 얻고, 이 지점이 유닛의 글로벌 AABB(Axis-Aligned Bounding Box) 내부에 있는지 확인하여 단일 유닛 선택을 최적화합니다. ⚡
- 물 평면을
StaticBody3D로 설정하고 특정 물리 레이어에 배치하여, 2D 마우스 위치에서 3D 월드로의 레이캐스트가 이 평면과 충돌하는 지점을 효율적으로 찾도록 합니다. 🌊
- 마우스 버튼을 놓았을 때 드래그가 없었다면 선택 박스 크기를 0으로 재설정하여, 드래그 선택과 단일 클릭 선택 로직을 구분할 수 있도록 합니다. 📏
- 유닛이 선택되거나 해제될 때 시각적 효과(예: 녹색 원)를 토글하고, 현재 선택된 유닛 목록을 업데이트하여 후속 작업(예: 이동)에 활용할 수 있도록 합니다. ✨
- Shift 키와 같은 보조 키를 누른 상태에서 선택하면, 기존 선택을 유지하면서 새로운 유닛을 추가로 선택할 수 있는 기능을 구현합니다. ➕