[Unity] AI Navigation

Flaming Bun·2025년 6월 3일

Unity

목록 보기
25/39

🔥 AI Navigation

유니티에서 제공하는 내비게이션 시스템으로 게임 내 캐릭터를 지능적으로 움직이게 할 때 사용한다.

AI Navigation 내부에서 경로를 찾는 알고리즘으로 A* 알고리즘을 사용하고 있다.


AI Navigation 사용 방법

내비메시 생성

게임에서 에이전트가 걸을 수 있는 영역을 나타내기 위한 데이터가 필요하다.
에이전트는 Unity에서 실린더로 정의된다.
걸을 수 있는 영역은 에이전트가 설 수 있는 위치를 테스트하여 자동으로 빌드되고,
이러한 위치가 씬 지오메트리의 맨 위에 위치한 표면에 연결된다.
이 표면을 내비게이션 메시(내비메시)라고 한다.

내비메시는 표면을 Convex 폴리곤으로 저장한다.
Convex 폴리곤은 폴리곤 안의 두 지점 사이에 아무런 장애물이 없다.
폴리곤의 경계를 비롯해 서로 이웃한 폴리곤에 대한 정보도 저장한다.
이렇게 하면 걸을 수 있는 모든 영역을 추론할 수 있다.

[AI Navigation] 패키지를 추가한다.
[Window] - [AI] - [Navigation(Obsolete)]를 클릭한다.
[Object]를 누르고 내비메시를 생성할 객체를 선택하고, [Navigation Static]을 체크하고,
이동 가능한 영역이면 [Walkable]로 설정한다.
이동이 불가능한 영역이면 [Not Walkable]로 설정한다.
[Bake]로 이동해서 Agent의 크기에 맞게 설정하고 이동할 수 있는 장애물 높이, 경사 기울기 등 설정하고 [Bake]를 눌러 내비매시를 베이킹한다.

[왼쪽 이미지: Bake 전] --- [오른쪽 이미지: Bake 후]


내비메시 에이전트 생성

내비메시 베이크가 끝났으면 이동한 캐릭터를 생성한다.
NaviMesh Agent컴포넌트와 스크립트를 통해 작업을 할 수 있다.

움직일 오브젝트에 Nav Mesh Agent 컴포넌트를 추가한다.

이동 스크립트 작성

NavMeshAgent.SetDestination() : 에이전트에 이동하고자 하는 포인트를 설정할 수 있다.

예시)

NavMeshAgent agent = GetComponent<NavMeshAgent>();
agent.SetDestination(goal.position);

내비메시 장애물 생성

이동하는 동안 피해야 하는 장애물을 설정할 때 NavMesh Obstacle 컴포넌트를 사용한다.

장애물로 사용할 오브젝트에 NavMesh Obstacle 컴포넌트를 추가한다.
위와 같이 콜라이더 같은 것이 생성된다. (장애물의 크기)
Carve를 체크해서 에이전트가 장애물을 피하도록 한다.

장애물의 크기와 Bake 옵션에 맞춰 영역이 생성된다.
해당 영역은 Agent가 장애물로 인식한다.

0개의 댓글