경로 찾기 및 경로 따르기 시스템은 Gameware Navigation에서 제공하는 가장 높은 레벨의 서비스입니다. 쿼리 시스템을 포함하여 도구상자 레이어에서 제공하는 여러 가지 다른 하위 시스템을 적용합니다.
시스템은 Bot 클래스 및 그 하위 컴포넌트를 기준으로 하며, 다음을 포함하여 3차원 게임에서 캐릭터의 경로 찾기 제공과 관련된 여러 가지 복잡한 작업을 관리합니다.
Gameware Navigation 경로 찾기 및 경로 따르기 시스템을 사용하려는 각 NPC에는 Bot 클래스의 고유한 인스턴스가 있어야 합니다. 통합 자습서에 있는 단계를 수행했다면(게임 엔진에 Navigation 통합 참조) 게임 캐릭터에 대한 Bot을 초기화, 업데이트 및 삭제하기 위한 최소한의 코드를 이미 작성한 것입니다.
Bot 클래스의 각 인스턴스는 다음 섹션에 설명된 대로 경로 찾기 및 따르기를 위해 동일한 일반 프로세스를 사용합니다.
경로 따르기 시스템의 첫 번째 단계는 NavData를 통해 초기 경로를 계산하여 시작점(일반적으로 Bot의 현재 위치)을 원하는 대상에 연결하는 것입니다. 이 초기 경로는 가장자리로 연결한 노드로 구성된 변경이 불가능한 정적 구조인 Path 클래스의 인스턴스로 나타납니다.
예를 들어 아래 이미지에서 노란색 봇은 지붕 꼭대기에 있는 대상에 대한 경로를 계획했습니다. 경로는 지면의 NavMesh를 통과하고 지면을 지붕 꼭대기에 연결하는 NavGraph 가장자리를 따라 이동한 다음 지붕 꼭대기에서 NavGraph 가장자리 끝에서 대상까지 연결하는 최종 세그먼트를 갖게 됩니다.
기본적으로 모든 Bot이 NavigationProfile이라는 오브젝트에서 검색하는 Path를 계산할 수 있는 쿼리에 액세스할 수 있습니다. 새 경로를 계산하려는 경우 Bot API를 사용하여 경로 계산을 요청하고 Bot이 다음 업데이트 동안 비동기로 쿼리를 수행합니다.
여러 가지 다른 방법으로 Bot이 경로를 계산하도록 요청하거나 사전 계산된 경로를 Bot에 제공할 수 있습니다. 자세한 내용은 정적 경로 가져오기을(를) 참조하십시오.
Bot이 성공적으로 Path를 계산하거나 고유한 Path를 주입하면 경로 따르기 시스템이 새 경로를 분석하고 이로부터 LivePath라는 새 구조를 구성합니다. LivePath는 언제든지 경로에 대한 정보를 검색하기 위해 찾아볼 수 있는 PathEvents 목록을 포함하여 Bot의 경로 따르기 프로세스 상태 및 경로에 대한 여러 가지 중요한 컨텍스트 정보 항목을 유지하는 동적 구조입니다. 이러한 PathEvents를 사용하여 다른 지세 유형, 스마트 오브젝트 또는 잘못된 영역으로의 예정된 전환을 경로를 따라 검색할 수 있습니다.
예를 들어 아래 이미지에서 플래그는 경로가 다른 NavTag가 있는 영역을 교차하고 NavGraph 가장자리의 시작 및 끝에서 교차할 때마다 LivePath에 전환 이벤트를 표시합니다.
이러한 PathEvents 및 이들과 상호 작용할 수 있는 방법에 대한 자세한 내용은 PathEvent 모니터링을(를) 참조하십시오.
각 프레임에서 Bot은 Trajectory 오브젝트를 호출하여 현재 프레임에서 수행되어야 하는 이동을 결정합니다. Trajectory는 Bot과 해당 경로의 현재 조건을 평가하고 이동하는 장애물과 같이 충돌을 생성할 수 있는 다른 모든 영향을 고려합니다. 이러한 요소 및 캐릭터의 보행을 제어하는 구성 매개변수 세트에 따라 캐릭터가 현재 프레임에서 따라야 하는 권장 속도를 생성합니다.
기본적으로 Bot은 Trajectory 클래스의 인스턴스를 사용하도록 설정됩니다. 이 Trajectory의 구현에서는 최종 속도 계산에 두 가지 다른 전략 중 하나를 사용할 수 있습니다.
예를 들어 아래 이미지에서 봇은 모서리에 접근하는 동안 계속 LivePath를 따라 마지막으로 보이는 점을 목표로 합니다. LivePath를 더 많이 볼 수 있도록 모서리에 충분히 가까워지면 경로를 따라 최대한 멀리 대상점을 앞으로 이동시킵니다.
이 전략은 캐릭터가 초기 경로에서 이전의 날카로운 회전을 건너뛸 수 있는 비교적 간단한 고성능 방법을 제공합니다. 그러나 캐릭터가 새로운 바로 가기를 사용할 수 있을 때 속도 및 직면 방향을 갑자기 변경하도록 허용할 수 있습니다.
예를 들어 아래 이미지에서는 주황색으로 표시된 채널 경계를 볼 수 있습니다. 경계는 장애물 사이의 좁은 간격에서 더 가깝게 밀착됩니다. 또한 NavGraph를 따르는 경로의 세그먼트에 대한 채널이 없습니다. 첫 번째 채널은 NavGraph 가장자리의 시작에서 끝나고 두 번째 채널은 지붕 꼭대기에서 시작됩니다. 위의 바로 가기 예와 마찬가지로 봇은 경로를 따라 진행하면서 새 스플라인(빨간색으로 표시)을 정기적으로 계산합니다.
이 전략은 초기 경로 주변에서 사용 가능한 공간을 더 많이 사용하는 보다 둥근 궤적을 생성하는 경향이 있으며, 채널 데이터를 생성하기 위한 경로 찾기 단계와 경로 따르기 단계에서 약간 더 많은 CPU를 사용합니다.
Bot을 초기화할 때 사용되는 궤적 모드를 결정하고 초기화 후 언제든지 신속하게 변경할 수 있습니다. 경로 따르기 사용자 정의을(를) 참조하십시오.
Trajectory가 지정된 프레임에서 현재 사용하고 있는 전략에 관계없이 다음 조건을 적용할 수 있습니다.
궤적 및 동적 회피 시스템과 관련된 클래스에는 각 캐릭터에 대해 조정할 수 있는 광범위한 구성 매개변수가 포함되어 있습니다. 경로 따르기 사용자 정의을(를) 참조하십시오.
각 프레임에서 경로 따르기 시스템의 최종 결과를 검색하려면 다음 예에 표시된 대로 BotOutput에 액세스해야 합니다.
m_velocity = m_navBot->GetBotOutput().m_outputVelocity();
애니메이션 또는 물리적 시스템에 따른 어떠한 추가 제약 조건에 종속될 수 있는 게임 캐릭터에 이 속도를 적용할지 여부는 사용자가 직접 정할 수 있습니다.
Gameware Navigation은 게임에서 게임 엔티티가 이동하고 조종되는 방법을 가정하지 않습니다. 캐릭터는 완전히 애니메이션 구동이거나 물리적 구동일 수 있습니다. 그 이유는 Bot이 자동으로 자체적으로 이동하지 않기 때문입니다. 사용자는 경로 따르기 시스템에서 생성한 제안된 속도를 해석하고 요구 사항에 맞게 이를 조정하며 캐릭터에 적용하는 위치 및 속도에 대한 실제 변경 사항을 Bot에게 알려 줍니다.
경로 따르기 시스템은 언제나 캐릭터가 예측된 위치에 있을 것으로 예상하지 않습니다. 게임 엔티티가 다르게 움직일 수 있는 이유로는 여러 가지가 있을 수 있습니다.
대부분의 경우 Bot은 경로 따르기 시스템에서 계산한 제안된 속도와 진로를 벗어나도록 미는 게임에서의 이벤트 또는 실제 위치 및 속도 간의 사소한 차이와 관계 없이 투명하게 경로를 계속 따라갈 수 있습니다.
그러나 절벽에서 떨어지는 캐릭터와 같이 게임에서 현저한 차이가 발생할 수 있는 경우 각 프레임에서 경로를 따라 캐릭터 진행률의 유효성을 테스트하는 것이 좋습니다. 경로의 캐릭터 위치에 도달할 수 없거나 새 위치를 확인할 수 없는 경우 대상까지의 새 경로를 다시 계산할 수 있습니다. 경로 따르기 모니터링을(를) 참조하십시오.
캐릭터가 해당 경로를 따라갈 때 여러 종류의 이벤트에 응답해야 할 수 있습니다. 그런 경우가 발생할 때 적절하게 반응하고 처리하기를 원하는 이벤트를 주시하는 것은 사용자의 책임입니다.
자세한 설명은 경로 따르기 모니터링을(를) 참조하십시오.