Gameware Navigation에서는 두 가지 방법으로 월드의 동적 장애물 및 파괴 가능한 장애물의 존재를 처리합니다. 사용해야 하는 방법은 주로 장애물의 이동 여부에 따라 달라집니다.
Bot에서 기본 Trajectory 클래스를 사용하여 현재 대상 점으로 이동하고 Bot에서 회피를 활성화한 속도를 생성한 경우 회피 시스템은 잠재적으로 Bot과 충돌할 수 있는 주변의 모든 이동 장애물을 찾습니다. 주변의 충돌체와 해당 속도를 기반으로 회피 시스템은 충돌을 피할 수 있는 Bot의 안전한 속도를 찾습니다. 경로 따르기 시스템에 대한 자세한 내용은 경로 찾기 및 경로 따르기을(를) 참조하십시오.
동적으로 수정된 NavMesh는 게임에 스트리밍한 사전 생성된 NavMesh보다 우선합니다. Bot에서 사용하는 경로 찾기 쿼리를 포함하여 데이터베이스에 대해 실행되는 모든 쿼리는 사전 생성된 NavMesh 대신 동적으로 수정된 NavMesh를 고려합니다.
장애물을 표현하는 데 사용할 수 있는 클래스에는 세 가지가 있습니다.
TagVolume 클래스는 정지된 물리적 장애물 또는 해당 범위가 항상 NavMesh에 통합되는 추상 구역을 나타냅니다.
각 TagVolume은 오브젝트 초기화 시 설정한 NavTag로 포괄하는 NavMesh 영역에 대한 태그를 지정합니다. 이 NavTag에 대해 영역을 탐색할 수 없는 것으로 표시하는 "배타적" 플래그를 지정할 수 있습니다. 이 경우 기본적으로 NavMesh에 구멍이 뚫립니다. 또는 경로 찾기, 경로 따르기 및 쿼리 중에 검색하고 처리할 수 있는 정수 데이터 값의 사용자 정의 배열로 영역의 태그를 지정할 수 있습니다. NavTag 시스템에 대한 자세한 내용은 사용자 정의 데이터로 태그 지정을(를) 참조하십시오.
예를 들어 오른쪽의 TagVolume은 배타적으로 플래그가 지정되었습니다. 왼쪽의 TagVolume은 사용자 정의 데이터로 NavMesh에 대한 태그를 지정했습니다. 기본적으로 여전히 보행 가능하지만 경로를 따르는 동안 NavTag를 탐지하여 응답할 수 있습니다.
이 클래스를 사용하여 다음을 직접 표현할 수 있습니다.
TagVolumes 설정을(를) 참조하십시오.
CylinderObstacle 클래스는 해당 치수가 단일 원통으로 가장 잘 표현되는 이동 가능한 물리적 오브젝트를 나타냅니다.
기본적으로 이러한 오브젝트는 동적 회피 시스템에서만 고려됩니다. 그러나 정지 상태가 된 경우 내부 TagVolume을 투명하게 생성하여 NavMesh에 자체적으로 통합되도록 쉽게 요청할 수 있습니다.
예를 들어 왼쪽의 오렌지색 원통은 이동하므로 동적 회피에서만 고려됩니다. 다른 원통은 정지되어 있으므로 NavMesh에 통합됩니다. 회색 영역의 원통에는 배타적으로 설정된 NavTag가 있고, 녹색 영역의 원통에는 사용자 정의 데이터 값이 있는 NavTag가 있습니다.
CylinderObstacles 설정을(를) 참조하십시오.
BoxObstacle 클래스는 고정된 범위와 상자 모양의 볼륨을 가진 이동 가능하거나 자유 회전되는 물리적 오브젝트를 나타냅니다.
기본적으로 이러한 오브젝트는 동적 회피 시스템에서만 고려됩니다. 그러나 정지 상태가 된 경우 내부 TagVolume을 투명하게 생성하여 NavMesh에 자체적으로 통합되도록 쉽게 요청할 수 있습니다.
예를 들어 왼쪽의 오렌지색 상자는 이동하고 자유롭게 회전하므로 동적 회피에서만 고려됩니다. 다른 상자는 정지되어 있으므로 NavMesh에 통합됩니다. 회색 영역의 상자에는 배타적으로 설정된 NavTag가 있고, 갈색 영역의 상자에는 사용자 정의 데이터 값이 있는 NavTag가 있습니다.
BoxObstacles 설정을(를) 참조하십시오.
TagVolume을 NavMesh에 통합하는 작업은 계산이 복잡할 수 있습니다. 이 프로세스는 CPU 피크를 피하기 위해 자동으로 시간 분할되지만 새 TagVolume이 NavMesh에 즉시 통합되거나 지정된 프레임 수 이내에 통합된다는 보장은 없습니다.