본문 바로가기
프로그래밍/유니티

Unity NavMesh #2 Multiple Agent

by 넋두리- 2021. 2. 3.

NavMesh 빌딩 컴포넌트의 예제에 있는 내용을 보려고합니다.

NavMesh Building Component는 런타임 네비 메시 빌드(베이킹)가 가능하도록 추가로 제공되는 컴포넌트입니다.

 

유니티에서 기본으로 제공되는 컴포넌트가 아닌만큼 깃헙에서 다운로드가 필요합니다.

다운로드 : github.com/Unity-Technologies/NavMeshComponents

 

Unity-Technologies/NavMeshComponents

High Level API Components for Runtime NavMesh Building - Unity-Technologies/NavMeshComponents

github.com

다운로드된 프로젝트를 열고 예제 프로젝트를 하나씩 열어볼게요.

 

첫번째 예제 1_multiple_agent_sizes.unity를 엽니다.

노란색 실린더는 Humanoid, 빨간색 실린더는 Ogre로 세팅되어있습니다.

아래 gif를 보시면 두 에이전트가 최단거리 탐색에서 다른 결과를 도출해내는 것을 보실 수 있습니다.

 

1_multiple_agent_sizes

 

그럼 네비 메시가 어떻게 생성되어있는지 봅시다.

Hierarchy의 Geometry 노드에 보면 NavMeshSurface 스크립트가 두 개 붙어있습니다.

Multiple NavMeshSurface

NavMeshSurface에서

Collect Objects = All, Include Layers = Everything, Use Geometry = Render Meshes로 세팅되어있습니다. NavMeshSurface에서 모든 Render Meshes를 수집해서 네비 메시 생성에 사용한다는 뜻입니다.

 

Agent Type는 어떤 에이전트가 해당 NavMeshSurface를 사용할 지 세팅하는 부분입니다.

 

Window -> AI -> Navigation로 네비게이션 탭을 열어

NavMeshSurface에서 사용되는 에이전트 세팅을 확인합시다.

 

Navigation Tab

 

여기에서 각 에이전트에 맞는 값으로 세팅하고 필요하면 에이전트 타입을 추가할 수 있습니다.

multiple agent size라는 샘플 프로젝트 이름이 맞게 Humanoid Radius = 0.5, Ogre Radius = 1인 것에 주목해주세요.

 

그럼 미리 빌드된 네비메시를 확인해봅시다. 네비메시를 보기 위해서는 씬 뷰를 열고

Navigation탭을 누르거나,

하이라키에서 NavMeshSurface 스크립트가 달려있는 노드(여기서는 Geometry)를 클릭하면 됩니다.

파란색의 Walkable 영역을 볼 수 있는데요.

NavMeshSurface Script에 각각 한 벌씩 빌드되어 겹쳐있는 모습입니다.

 

하나씩만 활성화시켜보면 아래처럼 각각 네비메시가 어떻게 생성되어있는지 확인이 가능합니다.

Humanoid_NavMeshSurface
Ogre_NavMeshSurface

Agent의 Radius를 기반으로 NavMesh가 Bake되기 때문에

Agent Type을 Ogre로 세팅한 네비 메시가 더 좁은 영역인 것을 볼 수 있어요.

 

직접 샘플 프로젝트를 실행시켜서

Navigation 탭에서 NavMeshAgent의 세팅 값을 바꿔보고

NavMeshSurface를 빌드하면 네비 메시의 영역이 바뀌는 것을 볼 수 있습니다.

(※ 스크립트에 붙어있는 Bake/Clear 버튼은 런타임에 동작하지 않습니다. 에디터 모드에서 Bake 해주세요.)

 

Ogre의 Radius를 2로 세팅했더니 아예 건너 갈 수가 없어졌네요.

 

NavMeshSurface_Bake

톰을 Orge, 제리를 Humanoid로 본다면

톰이 다리를 건너가질 못하니 제리의 은신처로 활용할 수 있겠네요!!

 

저도 이런 복수의 에이전트를 배치해서 활용하고 있는 부분이 있는데요,

이후에 NavMeshSurface의 실시간 카빙 기능을 활용하면서 이야기 해볼게요.

 

그럼 이만..

댓글