데브허브 | DEVHUB | The (OTHER) MUST-HAVE Feature for Your Next Godot RTS?The (OTHER) MUST-HAVE Feature for Your Next Godot RTS?
- Godot RTS에서 유닛 그룹 이동은 기존 유닛 선택 시스템을 기반으로 합니다. 🎮
- 유닛 이동은 맵의 특정 지점(예: 물 평면)에 대한 우클릭 레이캐스트를 통해 목적지를 설정합니다. 🎯
- RTS 게임의 성능 최적화를 위해
CharacterBody 노드와 물리 기반 이동 대신 수동 변환을 사용합니다. 🚀
- 각 유닛은
_process 함수를 통해 목표 지점으로 서서히 이동하며, 이동이 완료되면 _process를 비활성화하여 최적화합니다. 🚶
- 초기 유닛 겹침 방지책으로 고정 오프셋을 사용하지만, 이는 완벽하지 않으며 유닛이 부적절한 위치에 놓일 수 있습니다. 📏
- 유닛 겹침 문제를 해결하기 위해, 알고리즘을 통해 각 유닛의 목표 위치를 계산하는 유닛 대형(예: 라인 대형)을 사용합니다. 📐
- 유닛 대형 계산은 노드에 종속되지 않는 정적 클래스(GDScript의
Object 상속)를 통해 구현되어 어디서든 접근 가능합니다. 🏛️
- 유닛이 금지된 지역(예: 배가 육지로 가는 것)으로 이동하는 것을 막기 위해 내비게이션 메시를 활용합니다. 🗺️
NavigationRegion3D 노드를 설정하고 환경 메시를 추가한 후, 에이전트 반경, 등반 매개변수, 셀 높이 등을 조정하여 내비게이션 메시를 베이킹합니다. 🏗️
- 각 유닛에
NavigationAgent3D를 사용하는 대신, NavigationServer3D API를 통해 모든 선택된 유닛의 경로를 중앙에서 미리 계산하여 성능을 최적화합니다. ⚡
- 유닛은 미리 계산된 경로 배열을 받아, 배열의 각 지점을 순차적으로 따라 이동하며 최종 목적지에 도달합니다. 🛤️