FSM이란?
F : Finite
S : State
M : Machine
주어진 유한개의 상태를 가지고 입력에 따라 어떠한 상태에서 다른 상태로 전환하는 장치 또는 그런 장치를 나타내는 모델입니다.
위 사진을 보면 유한개(4개)의 상태(Idle, Run, Shot, Swing)가 있고,
각 화살표(전이=Transition)로 방향(전환)을 나타냅니다.
각 상태는 Condition의 조건에 충족되면 실행됩니다.
내비게이션 시스템이란
유니티의 내비게이션 시스템은 기본적으로 NavMesh, NavMeshAgent, NavMeshObstacle이 있습니다.
NavMesh란
Nav Mesh Agent가 걸어다닐 수 있는 영역입니다.
[Window] - [AI] - [Navigation]을 눌러 내비게이션창을 생성해줍니다.
Object창에서는 NaveMesh를 전부 선택할 건지, Mesh Renderes컴포넌트만 가지고 있는 오브젝트에 할 것인지, 터레인에 할 것인지 정해주는 영역입니다.
Term | Description |
Agent Radius | 에이전트의 NavMesh 영역입니다. |
Agent Height | 에이전트의 높이입니다. |
Max Slope | 에이전트가 횡단할 수 있는 NavMesh 경사의 최대 각도입니다. |
Step Height | 에이전트가 오를 수 있는 계단의 높이입니다. |
Bake를 구우면 이렇게 파란색 영역이 생깁니다.
파란색 영역이 생기지 않는다면 Navigation static을 활성화 하시면 됩니다.
Area 창은 메시 구역의 비용을 선택해주는 곳입니다.
화살표 위에 표시된 숫자는 A까지 가는데 비용입니다.
(4, 7, 1+2) 경로 비용이 존재하고 1+2 = 3이 가장 비용이 작으므로 내려갔다 올라가는 길을 에이전트는 선택할 것입니다.
NavMeshAgent란
Nav Mesh Agent는 내비게이션 메쉬 위에서 길을 찾아 움직이는 오브젝트입니다.
에이전트에는 반드시 Nav Mesh Agent 컴포넌트를 붙여줘야합니다.
Term | Description |
Base Offset | 에이전트가 자신의 경로를 찾을 때 사용하는 충돌 실린더의 위치입니다. |
Speed | 에이전트가 이동하는 속도입니다. |
Angular Speed |
에이전트가 회전하는 속도입니다. |
Acceleration | 가속도를 나타내며, 이 값을 높이면 에이전트가 최대 속도에 빠르게 도달합니다. |
Stopping Distance |
목표 지점에서 얼마나 떨어진 위치에서 멈출 것인지를 결정합니다. |
Auto Braking |
자동으로 충돌 전에 감속하는 옵션입니다. |
Obstacle Avoidance | 다른 에이전트 및 NavMeshObstacle와의 충돌을 피하기 위해 구성하는 부분입니다. Radius와 Height는 해당하는 대로 사용됩니다. 품질(Quality)이 높을수록 충돌을 피하는 능력이 향상됩니다. |
Priority | 우선순위를 나타내며, 우선순위가 낮으면 무시됩니다. 동일한 우선순위인 경우 피하려고 노력하지만 불가능하면 무시됩니다. 자신의 우선순위가 높으면 다른 에이전트를 밀어내지 못합니다. |
Auto Repath |
에이전트가 길을 따라 이동 중에 네비게이션 메시에 문제가 발생하면 자동으로 경로를 다시 찾을지 여부를 선택하는 영역입니다. |
Area Mask | 에이전트가 이동 가능하고 불가능한 지역을 지정하는 영역입니다. |
NavMeshObstacle란
Nav Mesh Obstacle는 Nav Mesh Agent의 경로를 방해하는 장애물 역할을 하는 존재입니다.
NaveMesh Static을 사용하는 대신 Nav Mesh Obstacle을 사용하는 이유는 런타임 도중에도 움직일 수 있다는 것입니다.
Shape에는 Bax와 Capsule이 존재합니다.
Carve는 내비게이션 메쉬를 파내버려서 에이전트가 움직일 수 없는 길로 만듭니다.
파란색 빗금은 에이전트가 갈 수 있는 영역이고 보라색 빗금은 에이전트가 가지 못하게 된 영역입니다.
Term | Description |
Move Threshold | 이동 임계값보다 낮게 이동할 경우 이동한 것으로 간주하지 않으며, Carve 기능을 수행하지 않습니다. |
Time To Stationary | 정지 시간보다 길 경우 Carve 기능을 실행합니다. |
Carve Only Stationary | 이 옵션이 활성화되면 정지 상태에서만 Carve를 수행합니다. |