Gameware Navigation의 컴포넌트 및 하위 시스템 대부분은 게임 지세 형상의 추상적 표현을 제공하고 고성능 공간 쿼리 및 경로 찾기를 지원하도록 모델링된 World 내의 데이터 구조 세트인 NavData에 의존합니다.
NavData는 게임의 AI에 있어 매우 중요한 리소스로, 캐릭터에게 이동하거나 이동할 수 없는 공간에 대한 정보를 제공하고 캐릭터가 의사 결정을 하고 이동하기 위한 기준을 제공합니다. 그러므로 Gameware Navigation을 최대한 활용하려면 게임 월드를 정확하게 매핑하는 NavData를 사용하는 것이 중요합니다.
이 장에서는 NavData에 대한 자세한 정보 및 사용자의 프로젝트 요구에 적합한 게임 월드에 효과적으로 NavData를 생성하는 방법을 제공합니다.
캐릭터는 NavData를 사용하여 캐릭터가 이동 가능한 게임 월드 영역을 결정합니다. 따라서 NavData는 반드시 사용하려는 캐릭터의 물리적 특성 및 이동 기능을 반영해야 합니다. 다른 치수가 있거나 다른 방향으로 이동하는 캐릭터는 매우 다른 NavData가 필요할 수 있습니다. 예를 들어 한 월드에서 사람이 이동할 수 있는 공간을 표현하면 동일한 월드에서 차 또는 공룡이 이동할 수 있었던 공간에 대한 표현이 유효하지 않게 됩니다.
비율이 다른 다양한 유형의 캐릭터가 있는 경우 해당 캐릭터의 이동 기회를 표현하려면 다양한 NavData 세트가 필요할 수 있습니다. 캐릭터의 비율이 상당히 비슷하고 런타임 시 게임에서 이상한 궤적을 만들지 않는 경우, 두 유형의 캐릭터에서 하나의 NavData 세트를 공유하게 함으로써 메모리를 절약할 수 있습니다. 그러나 이렇게 하면 항상 더 큰 캐릭터에 대해 생성해야 합니다.
다중 데이터베이스 사용을(를) 참조하십시오.
다음 섹션에서는 Gameware Navigation에서 사용하는 NavData의 주 유형(NavMesh 및 NavGraph)을 소개합니다.
NavMesh는 지면을 걸어다니는 캐릭터가 액세스할 수 있는 정적 3D 월드의 영역을 표현한 것입니다. NavMesh는 캐릭터가 자유롭게 이동할 수 있는 영역을 정의하는 연결된 삼각형 세트로 구성됩니다("NavMesh 내부"라고 함). NavMesh 삼각형에 포함되지 않은 영역은 "NavMesh 외부"라고 합니다. 정상적인 환경에서는 Gameware Navigation이 해당 경로를 따르는 동안 NavMesh 외부로 캐릭터를 안내하지 않습니다(NavGraph를 사용하는 경우 제외, 아래 참조).
다음 이미지는 NavMesh를 시각적으로 표현한 것입니다. NavMesh에서 색상이 지정된 삼각형은 지세의 보행 가능 영역을 채우는 표면을 형성합니다. 또한 NavMesh의 경계는 벽 및 정적 장애물에서 약간 떨어져 있습니다. 이 거리는 대략 NavMesh를 사용하는 캐릭터 너비의 절반 정도입니다. 캐릭터 중심(캐릭터가 있는 위치에서 가정)이 정적 장애물과의 거리보다 가깝게 이동하지 않도록 하면 정적 장애물과의 충돌 가능성을 피할 수 있습니다.
기본적으로 NavMesh는 2D 표면이지만 여러 개의 바닥, 나선형 계단 등 복잡한 큰 3D 영역도 완벽하게 지원합니다.
Gameware Navigation 경로 찾기 및 경로 따르기 시스템은 주로 NavMesh를 사용하여 지세에서 정적 오브젝트 및 동적 오브젝트의 위치를 결정하고 두 점 간의 직접 경로에 있는 장애물을 확인합니다(있는 경우). 이는 캐릭터가 경로를 쉽게 가려고 하거나 해당 경로에서 더 멀리 있는 점에 대한 지름길을 찾으려는 경우에 특히 유용합니다. NavMesh가 없을 경우 캐릭터는 물리적 월드를 상대로 리소스 소모가 큰 광선 투사 및 충돌 테스트를 수행하지 않고서는 월드에서 캐릭터와 다른 위치 사이에 장애물이 있는지 여부를 확인할 수 없습니다. 게임 월드에서 봇 및 다른 컴포넌트가 수행해야 하는, 리소스 소모가 큰 테스트 횟수를 줄이므로 NavMesh를 사용하면 경로 찾기 시스템의 성능이 훨씬 좋아집니다.
또한 NavMesh에서 자체 고성능 공간 쿼리를 수행하여 자체 용도를 위해 자체 코드에서 최적화된 공간화를 이용할 수 있습니다. 쿼리 시스템 사용을(를) 참조하십시오.
위 이미지에서 NavMesh의 삼각형은 다른 영역에서 색상이 다르게 지정됩니다. 이러한 색상은 NavTag로 알려진 다른 사용자 정의 데이터 값을 나타내며 삼각형에 할당되어 다른 지세 유형을 나타냅니다. 캐릭터에 대해 경로 찾기를 설정하는 경우 이러한 태그를 이용하여 캐릭터가 가로지를 수 있거나 가로지를 수 없는 지세 종류를 지정하거나, 해당 영역에서 캐릭터의 경로 따르기를 제어하는 스마트 오브젝트에 연관시킬 수 있습니다. 사용자 정의 데이터로 태그 지정을(를) 참조하십시오.
NavMesh의 삼각형은 대략적으로 지면과 같은 고도에 있습니다. 하지만 삼각형의 고도는 기본적으로 지면 고도의 근사값으로만 표시되며, 여러 층으로 이루어진 건물에서처럼 겹치는 여러 이동 가능 영역을 구분하는 데 도움이 됩니다. 일부 영역에서 NavMesh는 지면 아래를 통과할 수도 있습니다.
다른 용도(예: 물리적 시스템을 사용하지 않고 캐릭터를 지면에 클램핑)를 위해 NavMesh의 고도에 의존하려는 경우 NavMesh가 지세 메시의 고도를 따르는 정확성을 향상시키도록 NavData 생성 시스템을 구성할 수 있습니다. 자세한 내용은 고도 정밀도 향상을(를) 참조하십시오.
NavGraph는 3D 공간의 위치에 있는 정점을 구성하는 공간 구조로, 가장자리로 연결되어 있습니다. 이를 사용하여 엘리베이터, 점프 지점 또는 텔레포터와 같이 NavMesh의 연결이 끊어진 영역에 있는 점 간에 새 토폴로지 연결을 만들 수 있습니다. NavGraph는 일반적으로 캐릭터의 기능을 제어하여 그 가장자리를 가로지르고, 가장자리를 가로지르는 동안 캐릭터의 모션을 완벽하게 제어할 수 있는 스마트 오브젝트에 연결됩니다. 스마트 오브젝트 만들기을(를) 참조하십시오.
NavGraph 가장자리는 NavMesh의 경계를 교차할 수 있으며 NavMesh 외부에 있는 정점을 포함할 수도 있습니다. 이 가장자리는 두 정점 간의 단일 가장자리처럼 간단할 수도 있고 짚라인(zipline)처럼 NavMesh의 탐색 가능성을 벗어나는 복잡한 네트워크를 형성할 수도 있습니다.
예를 들어 다음 이미지에서 화살표는 지면의 점에서 지붕의 점을 연결하는 NavGraph 가장자리를 나타냅니다. 이들은 점프 애니메이션을 재생하거나 사용자 정의 궤적을 계산하여 가장자리 중 한 곳을 따라 경로를 계획하는 캐릭터의 경로 따르기를 관리하는 스마트 오브젝트와 연결될 수 있습니다.
NavGraph는 NavMesh에 대해 선택적인 향상 기능으로, 게임에서 특수 이동 유형 또는 스마트 오브젝트에 대해 필요한 경우 이들을 만들거나 NavData에 추가합니다. NavData 생성 시스템 자체에서는 절대로 NavGraph를 자동으로 만들지 않습니다. 데이터 생성 프로세스 중(일반적으로 섹터에 대해 NavMesh를 생성한 다음 실행하는 사후 처리 단계에서)이나 런타임 시 동적으로 직접 NavGraph를 만듭니다. NavGraph 만들기을(를) 참조하십시오.
위에서 설명한 NavMesh 및 NavGraph는 지세에 대해 사전에 생성하여 런타임 시 메모리로 로드하는 정적 데이터 구조입니다. 그러나 정적 NavData는 동적 요소(예: TagVolumes, BoxObstacles 및 CylinderObstacles)에 의한 게임 과정 중 각 World에서 풍부해지고 수정될 수 있습니다.
동적 장애물 및 TagVolume 사용을(를) 참조하십시오.