NavMesh 란??
Nav 는 내비게이션을 말하고 Mesh라는 단어는 3D에서는 삼각형이나 다각형 여러 개로 면을 구성하는 것을 의미합니다.
NavMesh는 Unity 게임 엔진에서 사용되는 내비게이션 시스템입니다. 이 기능을 사용하면 게임 캐릭터나 AI 게임오브젝트가 이동할 수 있는 경로를 자동으로 계산하고 이동할 수 있습니다. NavMesh 시스템은 설정 한 지형 데이터를 분석하여 게임 오브젝트의 이동 가능한 영역을 설정하고, 게임 캐릭터나 AI게임오브젝트가 해당 영역을 따라 이동할 수 있도록 자동으로 경로를 계산해 주는 아주 편리한 기능입니다. 오늘은 이기능을 활용하여 게임오브젝트가 길을 자동으로 찾아 목적지 까지 도달하는 예제를 만들어 보겠습니다.
더 자세한 설명은 아래의 링크에 들어가서 공부해보세요!
https://docs.unity3d.com/Manual/nav-BuildingNavMesh.html
먼저 유니티 Hub에서 New Project 버튼을 누릅니다.
그 후 화면 왼쪽 Hierarchy창에서 마우스 우클릭을 해 3D Object -> Plane을 생성하고 Position (0, 0, 0)으로 설정 Scale(1,1,5) 으로 설정해 게임오브젝트가 움직일 수 있는 맵을 만들어 줍니다.
그 다음 같은 방법으로 Hierarchy창에서 마우스 우클릭을 해 3D Object -> Capsule를 생성하고 해당 Capsule의 position (0,1,-20) 으로 설정해주세요
이어서 Plane 과 Capsule 를 구별할 수 있도록 Capsule 의 색을 변경하겠습니다.
하단 Project창에서 마우스 우클릭 한 뒤 Create Material을 생성해주세요.
생성된 Material 를 클릭한 후 inspector 창에 있는 Albedo 속성 옆에 팔레트를 클릭하여 원하는 색상으로 변경해주세요.
후에 Material를 드래그하여 Capsule 에 넣어주세요
그리고 장애물을 만들어 보겠습니다. 장애물은 마음대로 한번 만들어 보세요
저는 이런식으로 만들어 보았습니다.
그리고 왼쪽 끝에 Capsule 가 이동할 목적지를 만들어 놓을게요 목적지는 Cube 로 만들어 줬습니다.
이제 NavMesh를 사용해서 자동으로 Capsule GameObject가 자동으로 목적지에 가도록 만들어 보겠습니다.
유니티 상단에 Window - > Ai -> Navigation 을 눌러주세요
그리고 움직이는 공간인 Plane GameObject를 클릭 후 우측 Navigaition 창에서 Navigation Staic 으로 지정하고
Navigaition Area 에서 Walkable 로 변경해줍니다
그 후에 장애물로 설정했던 GameObject들을 드래그 후 위와 같이 설정하는데 장애물 GameObject는 Navigaition Area 속성을 Not Walkable 로 설정해주셔야 합니다.
후에 Bake 로 이동하신 후 하단에 있는 Bake 버튼을 누르면
이렇게 변하게 됩니다.
Bake 에 있는 Agent Radius, Agent Heiget와 같은 값들을 변경하고 다시 Bake 를 누르면서 어떤 것들이 변하는지 한번 확인해보세요.
Agent Radius, Agent Heiget 에 대해 더 궁금한 것이 있다면 아래의 링크에서 찾아 공부해보세요
https://docs.unity3d.com/ScriptReference/AI.NavMeshAgent.html
이제 움직일 Capsule GameObject 에 NavMeshAgent를 달아보겠습니다. Capsule 클릭 후 Inspector 창에서 Add Component를 누릅니다.
Agent 검색 후 아래의 컴포넌트를 추가합니다.
그리고 Capsule 게임오브젝트에 스크립트를 넣어 보겠습니다.
그리고 목적지 게임오브젝트를 드래그하여 아래와 같이 스크립트 Point 변수에 넣어주세요!
결과입니다.
Capsule GameObject 에 있는 NavMeshAgent 속성을 변경하면서 무엇이 변하는지 확인해보세요 ! ㅃ2~
'C#' 카테고리의 다른 글
[C#][Unity] 내비게이션 시스템 (2) 동적 NavMeshLink 생성 (0) | 2023.08.03 |
---|---|
[C#][Unity] 오브젝트 생성 위치 제한하기 (0) | 2023.07.25 |
[C#][Unity] UI 이미지를 드래그해서 오브젝트 생성 (0) | 2023.07.11 |
[C#][Unity] 마우스로 오브젝트 드래그 앤 드랍 (0) | 2023.07.10 |
[C#][Unity] 열거형(Enum) (0) | 2022.12.16 |