Unity 자습서/Navigation

유니티 Navigation Basics #1 - 이동 구역 설정하기

개양반 2019. 1. 29.
728x90

개요

유니티의 Navigation 으로 간단하게 길찾기 AI 를 만들 수 있습니다.

시스템은 아래와 같이 구성되어 있습니다.

 

● 내비메시(NavMesh)

내비메비게이션 메시의 줄임말로, 게임 월드에서 걸을 수 있는 표면을뜻하며, 내시를 사용하여 이동할 수 있는 경로를 찾을 수 있습니다. 데이터 구조는 레벨 지오메트리에서 자동으로 빌드 또는 베이크됩니다.

 

● 내비메시 에이전트(NavMesh Agent) 

내비메시 에이전트를 사용하여 각자의 목적지로 이동하는 동안 서로를 피할 수 있는 캐릭터를 생성할 수 있습니다. 에이전트는 내비메시를 사용하여 게임 월드를 추론하며, 움직이는 장애물뿐만 아니라 서로를 피하는 방법을 알게 됩니다.

 

● 오프 메시 링크(Off-Mesh Link) 

오프 메시 링크를 사용하여 걸을 수 있는 표면만으로는 정의할 수 없는 내비게이션 단축키를 통합할 수 있습니다.예를 들어 배수로나 울타리를 뛰어넘거나 문을 지나가기 전에 여는 행동 등은 모두 오프 메시 링크로 정의할 수 있습니다. 

 

●  내비메시 장애물(NavMesh Obstacle) 

컴포넌트를 사용하여 에이전트가 월드를 탐색하는 동안 회피해야 하는 움직이는 장애물을 정의할 수 있습니다. 예로는 물리 시스템이 제어하는 통이나 상자를 들 수 있습니다. 움직이는 장애물이라면 에이전트가 이를 피하도록 하고, 장애물이 정지한 경우 내비메시에 구멍을 카빙하여 에이전트가 장애물을 돌아가도록 경로를 변경하거나, 정지한 장애물이 경로를 완전히 차단할 경우 에이전트가 다른 경로를 찾게 할 수 있습니다.

 


오늘 공부할 내용

프로젝트 환경을 설정하고 고정된 오브젝트 설정과 Navigation 뷰의 Bake 를 통해 이동할 수 있는 지역과 이동할 수 없는 지역을 나눌 것입니다.

 

프로젝트 만들기

유니티 버전 : 2018.3.3f1 

설치 폴더, 프로젝트 이름 등은 다르게 하셔도 상관없습니다.

 


애셋 다운받기

https://assetstore.unity.com/packages/templates/packs/low-poly-game-kit-110455

위 링크로 들어가서 애셋를 다운받습니다.

 

필요한 것만 체크해서 다운받습니다.

 


테스트 환경 만들기

필드 만들기

캐릭터가 뛰어다닐 배경을 만들겠습니다. 

Hierarchy 뷰에서 빈게임오브젝트를 생성하고 이름을 Enviroment 로 변경합니다. 

Enviroment 의 좌표를 리셋 시켜주세요.

LowPolyNature\Prefabs\Environment 폴더에 있는 terrain_green을 Hierarchy 뷰의 Enviroment 의 자식오브젝트로 드래그 앤 드롭합니다.

terrain_green의 Position, Scale, Rotation 값 등을 위 이미지처럼 설정합니다.

 

오브젝트 배치

Prefabs\Enviroment 에 있는 프리팹을 Enviroment 의 자식오브젝트로 이것저것 배치하세요. 저랑 똑같이 만들 필요는 없습니다. 길 찾기에 대해 공부할 것이기 때문에 적당히 통로도 만들어주고 언덕도 배치해주세요.

가급적이면 지면과 오브젝트가 알맞게 맞닿게 만들어주세요. V 를 누르고 오브젝트의 모서리를 드래그하시면 오브젝트와 오브젝트가 자석처럼 딱 달라붙습니다. 우리가 다운받은 애셋은 Y 값을 0으로 만들어 놓으면 대충 땅하고 알맞게 붙습니다.

 

카메라 설정

Hierarchy 뷰에서 MainCamera를 선택하고 Inspector 뷰에서 Position과 Rotation을 아래 이미지처럼 설정합니다. 위에서 아래로 보는 카메라입니다.

 


Navigation Static

Navigation Static 설명

Navigation Static 으로 설정된 오브젝트는 고정된 오브젝트이니 보행 가능한 구역을 계산하는데 사용할 수 있다는 의미입니다. 일반적으로 바닥, 벽, 고정 장애물 같은 오브젝트가 Navigation Static 으로 설정됩니다.

 

Navigation Static 설정

설정하기 전에 Enviroment 에 배치한 모든 오브젝트의 Static 설정을 Off 합니다. 그럼, 자식오브젝트까지 해당 설정을 해제할 것인지 묻는 팝업창이 뜨는데요. 자식까지 해제합니다.

 

그 다음 Inspector 뷰에서 Navigation Static을 체크합니다. 자식오브젝트까지 모두 설정합니다.

 


네비게이션 뷰

Navigation 뷰 열기

Window - AI - Navigation을 선택하면 Navigation 뷰가 팝업됩니다. 

 

Navigation - Agents 설명

Navigation의 Agents 탭에서는 이동하는 개체의 타입이름, 반지름, 높이, 올라갈 수 있는 계단 폭, 이동할 수 있는 최대 경사도 등을 설정할 수 있다.

 

Navigation - Areas 설명

Areas의 레이어에 따라서 네이게이션 계산에 적용할 비용 계수를 다르게 지정할 수 있습니다.

Cost가 높을 수록 해당 지역은 피해가려고 합니다. 

예를 들면 기본 도로는 Cost 가 1 이고 진흙은 보행하기가 어려우므로 Cost가 3 입니다. 거리 + Cost 의 총합이 가장 낮은 경로로 이동하게 됩니다.

 

Navigation - Bake 설명

Bake 탭에서는 NavMesh의 속성을 설정합니다.

 

Bake 버튼을 누르면 이동할 수 있는 구역과 이동할 수 없는 구역이 나눠집니다.

Max Slope 등을 변경하면서 네비메시가 어떤 식으로 변하는지 확인해보세요.

 

해당 강좌는 유투브에도 올라와있습니다. 

유투브 주소: https://youtu.be/kq2WLo3nSOk

댓글

💲 추천 글