Unity 내비게이션 및 경로 탐색 가이드
내비게이션 시스템 개요
게임 내 캐릭터(AI 에이전트)를 지능적으로 움직이게 하려면 두 가지 문제를 해결해야 합니다. 1. 레벨을 추론하여 목적지를 찾는 방법 2. 목적지로 이동하는 방법
이 두 가지 문제는 밀접하게 연결되어 있지만, 기술적으로는 다릅니다.
걸을 수 있는 영역
Unity 내비게이션 시스템은 에이전트가 서거나 움직일 수 있는 장소를 정의하는 걸을 수 있는 영역을 필요로 합니다. 에이전트는 보통 원통형(Cylinder)으로 모델링됩니다. 이 영역은 씬의 지오메트리를 기반으로 자동으로 빌드됩니다.
구분 | 설명 |
---|---|
에이전트 | 씬에서 탐색할 객체 (실린더로 표현됨) |
내비메시 | 걸을 수 있는 영역을 나타내는 Convex 폴리곤 |
경로 찾기 | A* 알고리즘을 통한 시작 위치에서 목적지까지의 경로 탐색 |
경로 찾기
경로를 찾으려면 시작과 목적지를 가장 가까운 폴리곤에 매핑한 후, 탐색을 시작합니다. A* 알고리즘을 사용하여 경로를 탐색합니다.
통로 및 에이전트 이동
- 통로: 시작 폴리곤에서 목적지 폴리곤까지의 경로를 정의하는 폴리곤의 시퀀스입니다.
- 에이전트는 통로를 따라 가장 가까운 코너로 이동하여 목적지에 도달합니다.
장애물 회피
장애물 회피는 에이전트의 움직임에 필수적입니다. Unity는 RVO(상호속도 장애물)를 통해 다른 에이전트와의 충돌을 방지합니다.
구분 | 설명 |
---|---|
스티어링 | 다음 코너의 위치를 파악하여 이동 방향 설정 |
장애물 회피 | 다른 에이전트 및 내비메시 가장자리와의 충돌 방지 |
내비게이션과 에이전트 이동
에이전트의 최종 속도가 계산된 후, 애니메이션 시스템에 제공되어 캐릭터를 이동시킬 수 있습니다. 이 단계는 내비게이션과 직결되며, 에이전트의 위치가 내비메시에 반영됩니다.
글로벌 vs 로컬 내비게이션
- 글로벌 내비게이션: 월드에서 통로를 찾는 데 필요한 프로세싱 능력과 메모리가 필요합니다.
- 로컬 내비게이션: 다른 에이전트와의 충돌 없이 다음 코너로 나아가는 방법을 결정합니다.
장애물 사례
내비게이션에서는 다양한 장애물이 존재합니다. 예를 들어: - 정지된 장애물: 카빙을 통해 경로를 차단 - 움직이는 장애물: 로컬 장애물 회피를 통해 미리 예상하여 회피
장애물 유형 | 처리 방법 |
---|---|
정지 장애물 | 글로벌 내비게이션 (카빙) |
움직이는 장애물 | 로컬 장애물 회피 |
오프 메시 링크 정의
에이전트가 걸어 다닐 수 없는 경우, 오프 메시 링크(예: 펜스 넘기)를 사용하여 특정 링크를 통해 연결됩니다. 이러한 링크를 설정하여 경로 탐색자가 인식할 수 있도록 하면 행동이 지정된 위치에서 발생합니다.
결론
Unity의 내비게이션 시스템을 이용하면 AI 에이전트를 효과적으로 제어할 수 있습니다. 위의 원리를 이해하고 응용함으로써 다양한 게임 개발 시 점차적인 개선을 꾀할 수 있습니다.