Region Setting
Layer 6번에 Player 추가.
BTTest Scene에 Test용으로Navigation(Obstacle), Bake로 구워둠.
In Range Player Check
correct Position Check & Random Position
InitializeAgent
- agent의 정지 거리, 이동 속도, 목적지, 회전 유무, 가속도를 할당
- Mesh : 3D에서 삼각형이나 다각형 여러개로 면을 구성하는 것을 의미
- NavMesh : 다각형 여러개로 캐릭터가 이동할 수 있는 표면을 구성하는 것
- Agent : Navigation Mesh 위에서 움직이는 대상
Unity에서 지원하는 AI Navigation에서는 크게 3종류로 나눠진다. NavMesh, NavMeshAgent, NavMeshObstacle
All : Scene에 있는 모든 Object를 보여준다.
Mesh Renderes : MeshRenderer 컴포넌트를 가지고있는 Object만 보여주는 필터
Terrains : Unity Engine에서 거대한 평면에 직접 높낮이를 조절하면서 지형을 만들수 있는 터레인 오브젝트만을 보여주는 필터
Agent Radius : NavMesh위에서 움직일 대상의 반지름
Agent Height : Agent의 키
Max Slope : NavMesh위에서 이동할 수 있는 길의 경사로의 최대각도
Step Height : Agent가 가벼운 계단정도로 여기고 올라갈수 있는 단의 높이
Speed : Agent가 움직이는 속도
Angular Speed: Agnet가 회전하는 속도 (degree/sec)
Acceleration : Agnet의 가속도
Stopping Distance : 목표와 얼마만큼의 거리를 두고 멈출지에 대한 길이
Auto Breaking : Agnet가 목적지에 도착하기 직전에 감속을 할 것인가 유무
NavMeshObstacle을 어떻게 회피할 것인지를 결정하는 프로퍼티들을 가지고 있다.
기본 상황에서 이동하는 Agnet는 길을 막고있는 Agnet를 향해서 이동하다가 돌아갈 길이 있으면 돌아가고 길이 없다면 살짝 밀어내고 길을 찾아간다.
Radius : Agnet가 다른 오브젝트와 겹쳐지지 않게 밀어내는 정도의 반지름 (반지름 충돌)
Height : Agnet끼리의 높이 충돌을 조절하는 프로터피
Quality : 높은(High) Quality일수록 다른 Agnet를 회피하기 위해 정밀한 움직임을 보이고 낮은(Low) Quality일수록 피하는 움직임이 간소화된다.
(양 쪽 모두 None일 경우, 서로 완전히 무시한다.)
Priority : Agnet간의 우선순위. 숫자가 낮을수록 높다.
우선순위가 높은 Agnet는 길을 찾을 때 우선순위가 낮은 Agnet를 고려하지 않고 그냥 밀고 지나간다.
우선순위가 같다면 회피하려는 노력을 하고 여의치 않다면 그냥 밀고 지나간다.
우선순위가 낮은 Agnet는 높은 우선순위의 Agnet를 밀어내지 못한다.
Auto Repath : Navigation Mesh에 변동이 생겼을 때, 자동으로 길을 다시 찾을 것인가 설정하는 프로퍼티이다.
목적지로 가는 최단 경로의 중간이 막히면 자동으로 경로를 다시 계산해서 이동한다.
(하지만 아주 먼 거리를 이동할 때 아직 시야에 보이지 않는 중간이 막혀도 경로를 재계산하기 때문에 경로가 막힌 구역까지 도착한 다음 새로 계산가히를 원하면 체크를 해제하고, 경로가 막힌 구역까지 도착한 다음 경로를 새로 계산하는 기능을 직접 구현해야 한다.)
Area Mask : Agnet가 지나갈 수 있는 영역과 지나가지 못하는 영역을 설정할 수 있다.
특정 영역을 꺼준다면 해당 캐릭터는 아무리 가까운 거리라도 그 영역을 통해 건너지 못한다.
이 컴포넌트는 장애물 역할을 한다. 기본 상태에서는 작은 장애물에만 자연스러운 움직임을 보이고 큰 장애물은 부자연스럽게 회피하는 동작을 보인다.
작은 장애물만 회피가 가능하면 Navigation Static으로 설정한 벽을 배치하는게 더 나을 것이라고 생각할 수 있지만, Navigation Static으로 설정된 벽은 움직일 수 없다. 반대로 NavMeshObstacle을 사용하는 장애물은 런타임중에도 언제든지 움직일 수 있다.
또한 실시간으로 에이전트를 밀어내는 동작도 가능하며, 장애물에 밀려난 목적지가 있는 에이전트는 다시 원래 자리로 돌아오려는 움직임을 보이게 된다.
Shape : 장애물의 형태를 결정하는 옵션으로 Box, Capsule 두 가지 형태를 지원한다. Carve를 제외한 프로퍼티는 이 Box나 Capsule의 크기를 설정하는데 쓰인다.
Carve : Carve는 ‘파내다’ 라는 뜻으로 Navigation Mesh 영역을 새로 굽지 않아도 “실시간”으로 ‘파내서’ 에이전트가 지나갈 수 없는 영역으로 만드는 것이다.
Carve를 켜서 실시간으로 Navigation Mesh를 파내게 하면 큰 장애물도 자연스럽게 회피가 가능하다.
Move Threshold : Crave의 하위 프로터피로 최소 이동 거리를 뜻한다. Move Threshold보다 조금 움직인 것은 오브젝트가 움직이지 않은 것으로 간주하여 Carve를 새로 계산하지 않는다.
Time to Stationary : 게임 오브젝트가 얼만큼 정지해있다면 완전히 멈춘 것으로 판단하고 Carve를 새로 계산해서 Navigation Mesh를 파낼지 결정하는 값이다.
Carve Only Stationary : 정지된 상태에서만 Navigation Mesh를 파낼지 결정하는 프로퍼티이다.
true라면 장애물이 움직이면 파내진 구멍이 사라졌다가 정지하면 Navigation Mesh를 다시 파낸다.
false라면 Navigation Mesh가 실시간으로 파진다.
베르의 게임개발 유튜브
Unity Documentation