사용자 정의 데이터로 태그 지정

NavTag라는 사용자 정의 데이터로 NavData의 임의 영역에 태그를 지정할 수 있으며 이를 통해 런타임 시 캐릭터가 영역에서 경로를 계획하고 따라 가는 방식에 영향을 줄 수 있습니다. 예를 들면 다음과 같습니다.

예를 들어 다음 이미지는 여러 가지 다른 유형의 NavTag로 설정된 지세를 나타냅니다.

NavTag 데이터 형식

각 NavTag에는 다음이 포함되어 있습니다.

NavTag는 다음 중 하나로 나타낼 수 있습니다.

생성 시간에 NavTag 포함

지세에 대해 사전에 생성하는 정적 NavData로 NavTag를 포함시키는 것에는 여러 가지 가능한 접근 방법이 있습니다.

개별 삼각형 태그 지정

GeneratorInputProducer 클래스가 NavData 생성 시스템에 삼각형을 제공할 때마다 특정 유형의 NavTag로 해당 삼각형에 태그를 지정할 수 있습니다.

  • ClientInputConsumer::ConsumeTriangleFromPos() 또는 ClientInputConsumer::ConsumeTriangleFromPosInClientCoordinates() 메서드를 호출하고 NavTag를 매개변수로 전달합니다.

TagVolume 제공

GeneratorInputProducer 클래스는 볼륨을 교차하는 모든 삼각형에 자동으로 적용해야 하는 NavTag를 정의하는 볼륨을 지정할 수 있습니다. 이 방법을 사용하려면

  1. ClientInputTagVolume 클래스의 인스턴스를 만듭니다.
  2. ClientInputTagVolume::Init()를 호출할 때 해당 윤곽, 고도 및 NavTag 데이터로 인스턴스를 설정합니다.
  3. ClientInputConsumer::ConsumeTagVolume()을 호출할 때 볼륨을 제공합니다.

런타임 시 동적으로 NavTag 추가

런타임 시 TagVolumes를 생성하고 Databases에 할당하거나 동적 장애물 관리 시스템에서 제공하는 동적 BoxObstacleCylinderObstacle 클래스를 사용하여 동적으로 NavTag를 추가할 수 있습니다. 사용자 정의 NavTag를 반영하기 위해 장애물 또는 새 TagVolume 영역에 있는 NavMesh가 자동으로 재생성되고 재삼각화됩니다.

자세한 내용은 동적 장애물 및 TagVolume 사용을(를) 참조하십시오.

NavTag 색상

NavTag에 따라 삼각형 및 TagVolume을 렌더링하기 위한 색상을 선택할 수 있습니다. 색상을 사용하여 NavTag를 빠르게 식별할 수 있습니다.

다음 함수를 사용하여 DynamicNavTag 색상을 설정할 수 있습니다.

NavTag를 배타적으로 설정하는 경우 해당 색상이 다음 그림에 표시된 대로 빨간색으로 자동 설정됩니다.

주:생성 TagVolume 또는 런타임 TagVolume에 대해 NavTag를 지정하는 방법이 다음 그림에 표시된 대로 변경되었습니다. 또한 패널의 NavTag 표시가 NavTag 색상을 지원하기 위해 변경되었습니다.

또한 런타임 TagVolume의 기본 색상은 다음 그림에 표시된 대로 짙은 주황색입니다.

NavTag 색상에 대해 다음 매개변수가 GeneratorAdvancedParamaters 클래스에 추가되었습니다.

이러한 색상은 생성 시간 중 NavTag에 대해 자동으로 설정됩니다. NavTag가 비어 있는지 여부에 따라 m_emptyDefaultNavTagColor 매개변수 또는 m_nonEmptyDefaultNavTagColor 매개변수가 기본 NavTag에 대해 설정됩니다. 이는 기본적으로 모든 삼각형에 대해 적용됩니다.

다음 사례에서는 m_nonDefaultNavTagColor 매개변수가 NavTag에 대해 설정됩니다.

삼각형 또는 TagVolume을 추가하기 전에 NavTag의 색상을 변경하는 경우 m_nonDefaultNavTagColor 매개변수가 설정되지 않습니다.

Navigation Lab의 Advanced Parameters 패널에서 이러한 색상을 수정할 수 있습니다. 다음 그림을 참조하십시오.

DynamicNavTag 클래스에 다음 메서드가 추가되었습니다.

NavGraphs 태그 지정

지세에서 NavGraph를 사용하는 경우 NavTag로도 해당 정점 및 가장자리의 태그를 지정할 수 있습니다.

  1. NavGraph를 설정하는 데 사용하는 NavGraphBlobBuilder를 만든 다음 NavGraphBlobBuilder::AddNavTag()를 순차적으로 호출할 때 NavGraph의 정점 또는 가장자리에 추가하려는 각 유형의 NavTag 인스턴스를 전달합니다. 각 유형의 NavTag는 메서드에 의해 반환된 인덱스로 식별됩니다.
  2. 정점 또는 가장자리를 추가할 때마다 NavGraphBlobBuilder::AddVertexWithNavTag(), NavGraphBlobBuilder::AddBidirectionalEdgeWithNavTag() 또는 NavGraphBlobBuilder::AddMonodirectionalEdgeWithNavTag() 메서드를 사용하고 해당 정점 또는 가장자리에 태그로 지정하려는 NavTag 유형에 해당되는 인덱스를 전달합니다.

NavGraph 만들기을(를) 참조하십시오.

병합 및 충돌 처리

서로 다른 NavTag로 태그가 지정된 둘 이상의 영역이 겹치는 경우에는 NavTag가 병합되지 않습니다. 그 대신 NavTag 클래스의 < 연산자를 호출하여 더 낮다고 확인된 NavTag가 유지됩니다.

예를 들어 다음 이미지에서 독점 볼륨이 오렌지색 볼륨보다 낮으며 오렌지색 볼륨은 녹색 볼륨보다 낮고 녹색 볼륨은 밝은 파란색 볼륨보다 낮습니다.

자세한 내용은 navtag.h 파일 구현을 참조하십시오.