Navigation Areas 는 특정 영역을 걸어서 지나가는 데 드는 비용(어려움)을 뜻하며, 경로를 탐색할 때에는 낮은 비용 영역순으로 선택됩니다. 또한 각각의 내비메시 에이전트에는 Area Mask 가 있어 에이전트가 이동할 수 있는 영역을 지정할 수 있습니다.
위의 예제에서, 영역 타입은 아래 두 개의 사용 사례에 사용됩니다.
영역 타입은 내비메시 베이킹에 포함된 모든 오브젝트에 할당할 수 있으며, 각각의 오프 메시 링크에는 영역 타입을 지정하는 프로퍼티가 있습니다.
비용을 조절하여 경로 탐색자가 경로를 탐색할 때 선호하는 영역을 제어할 수 있습니다. 예를 들어 한 영역의 비용을 3.0으로 설정하면, 해당 영역을 지나가기 위해서는 다른 경로로 지나갈 때보다 세 배의 시간이 걸립니다.
비용의 작동 방식을 완전히 파악하기 위해 경로 탐색자의 작동 방식을 살펴보겠습니다.
Unity는 A*를 사용하여 내비메시에서 최단 경로를 계산합니다. A*는 연결된 노드 그래프에서 작동합니다. 이 알고리즘은 경로 시작점에서 가장 가까운 노드에서부터 시작하여 여러 연결 노드를 거쳐 목적지에 도달합니다.
Unity 내비게이션은 폴리곤 메시로 나타나기 때문에 경로 탐색자는 우선 각 폴리곤에 노드의 위치가 되는 포인트를 배치해야 합니다. 최단 경로는 이 노드들 사이에서 계산됩니다.
위 그림의 노란 점과 선은 A*를 따라 가로지르는 순서에 따라 노드와 링크가 내비메시에 배치되는 방식을 보여줍니다.
두 노드 사이를 이동하는 비용은 이동하는 거리와 링크 아래의 폴리곤 영역 타입에 설정된 비용에 따라 달라지며, 이를 거리 * 비용 이라고 합니다. 실제로 영역의 비용이 2.0인 경우 해당 폴리곤을 지나가는 거리는 두 배로 표시됩니다. A* 알고리즘에서는 모든 비용이 1.0 이상이어야 합니다.
최종 경로에서의 비용의 영향은 조절하기 어려우며, 특히 경로가 길수록 더 어렵습니다. 비용을 다루는 가장 좋은 방법은 비용을 힌트로 취급하면 됩니다. 예를 들어, 에이전트가 오프 메시 링크를 너무 자주 사용하지 않게 하려면 이 비용을 늘리면 됩니다. 하지만 에이전트가 보도 위를 걷는 것을 선호하는 동작을 조절하기는 어려울 수 있습니다.
어떤 레벨에서 경로 탐색자는 항상 최단 경로를 선택하지 않는다는 점도 알아두어야 합니다. 이는 노드 배치 때문입니다. 작은 장애물 옆에 큰 열린 영역이 있을 때, 즉 내비게이션 메시에 아주 큰 폴리곤과 아주 작은 폴리곤이 포함될 때 이런 현상을 쉽게 볼 수 있습니다. 큰 폴리곤의 노드는 해당 폴리곤의 아무 곳에나 배치될 수 있는데, 경로 탐색자의 관점에서 볼 때 이것이 우회 경로로 보일 수 있습니다.
영역 타입 의 비용 은 Areas 탭에서 전역으로 설정하거나 스크립트를 사용하여 에이전트별로 오버라이드할 수 있습니다.
영역 타입은 내비게이션 창 의 영역 탭에 있습니다. 29 개의 커스텀 타입과 Walkable, Not Walkable, Jump 등 3개의 빌트인 타입이 있습니다.
다른 영역 타입의 오브젝트가 여러 개 중첩되는 경우 일반적으로 최종 생성된 내비메시 영역 타입이 우선적으로 적용됩니다. 하지만 Not Walkable 은 예외적으로 항상 최우선적으로 적용됩니다. 이를 통해 특정 영역을 차단해야 하는 경우 확실하게 차단할 수 있습니다.
각 에이전트에는 내비게이션에 사용할 영역을 정의할 수 있는 Area Mask 가 있습니다. 영역 마스크는 에이전트 프로퍼티에서 설정할 수 있으며, 런타임 중에는 스크립트를 사용하여 비트마스크를 조작할 수 있습니다.
영역 마스크는 특정 타입의 캐릭터만 해당 영역을 지나갈 수 있게 할 때 유용합니다. 예를 들어 좀비에게서 도망치기 게임에서 각각의 문 아래 영역을 Door 영역 타입으로 표시하고, 좀비 캐릭터의 영역 마스크에서 Door 영역을 선택 해제하면 좀비가 해당 영역을 통과하지 못합니다.