PathEvent 모니터링

PathEvent 개요

Bot에서 소유한 LivePath는 경로를 따르는 여러 종류의 이벤트 목록을 유지합니다.

이러한 각 이벤트는 PathEvent 오브젝트로 표시됩니다. LivePath는 PathEventList(PathEvents의 인덱스화된 목록 및 이벤트 사이에 있는 "간격"의 인덱스화된 목록)를 유지합니다. PathEvent 오브젝트에서 유지하는 데이터 구성원을 사용하여 해당 이벤트 유형을 확인하고, 3D 위치를 찾고, 체크 포인트 상태를 가져오고 설정하는(체크 포인트 사용 참조) 등의 작업을 수행할 수 있습니다.

PathEventList 찾아보기

Bot::GetPathEventList()를 호출하여 LivePath에서 전체 이벤트 목록을 검색할 수 있습니다. 그런 다음 PathEventList 클래스의 메서드를 사용하여 목록의 모든 이벤트를 반복할 수 있습니다.

대상 점 사용

PathEvent의 전체 목록에는 Bot의 현재 위치 및 대상 점 뒤쪽에 있는 이벤트(예: Bot이 이미 지나갔거나 바로 통과하도록 선택된 이벤트 및 하한 경계)가 포함됩니다. 예정된 이벤트와 이미 경과된 이벤트를 확인할 수 있습니다. 예를 들어 경로를 따라 앞쪽으로 특정 거리 내에 있는 이벤트만 확인할 수 있습니다.

현재 대상 점을 사용하여 Bot 앞에 있는 이벤트를 확인할 수 있습니다.

  1. Bot::GetProgressOnLivePath()를 호출하여 경로 따르기 시스템에서 Bot이 도달할 것으로 간주하는 경로를 따라 현재 지점을 나타내는 PositionOnLivePath 오브젝트를 가져옵니다.
  2. PositionOnLivePath::GetOnEventListStatus() 메서드를 호출하여 현재 진행률 지점이 하나의 이벤트(OnEventListStatus_OnEvent)에 있는지, 아니면 두 이벤트 사이의 간격(OnEventListStatus_OnInterval)에 있는지 확인합니다.
  3. PositionOnLivePath::GetOnEventListIndex() 메서드를 호출하여 전체 PathEventList 내에서 이벤트 또는 간격의 인덱스를 가져옵니다. 이 값보다 인덱스가 낮은 이벤트 또는 간격은 모두 Bot 뒤쪽에 있으며, 이 값보다 인덱스가 높은 이벤트는 경로에서 예정된 이벤트입니다.

    PositionOnLivePath::GetNextPathEventIdx()PositionOnLivePath::GetPrevPathEventIdx()를 호출할 수도 있습니다. 그러나 반환 값 해석에 대한 자세한 내용은 API 참조의 설명을 참조하십시오.

다음 NavTag 가져오기

실제로 알아야 하는 정보 항목은 다음 이벤트와 연관된 NavTag뿐입니다. 예를 들어 NavTag가 스마트 오브젝트와 연관된 경우 Bot에서 스마트 오브젝트에 지침을 묻기 시작하도록 할 수 있습니다.

PathEventList와 직접 상호 작용할 필요 없이 Bot::GetUpcomingEventNavTag()를 호출하여 다음 이벤트의 NavTag를 간편하게 확인할 수 있습니다.

새 PathEvent 알림 등록

특정 조건에 대해 테스트할 경로 이벤트 목록을 확인하는 대신, Bot을 초기화할 때 사용자 정의 관측자 오브젝트를 등록할 수 있습니다. Bot은 새 경로의 이벤트에 응답할 수 있도록 PathEventList를 생성, 업데이트 또는 삭제할 때마다 이 관측자의 메서드를 호출합니다.

이는 사용자 정의 스마트 오브젝트에 Bot을 등록하거나 등록 취소하는 것과 같은 사용자 정의 초기화 단계를 수행하는 데 유용할 수 있습니다. 예를 들어 새 경로에서 게임 플레이 중에 닫힐 수 있는 문을 사용하는 경우 해당 문을 제어하는 오브젝트에 Bot을 등록할 수 있습니다. 이렇게 하면 문이 닫힐 때 캐릭터에 문을 사용하도록 계획했음을 알립니다. 캐릭터는 경로 재계산을 트리거하여 이 동작에 응답할 수 있습니다.

이 방법을 사용하려면

  1. IPathEventListObserver에서 파생되고 해당 가상 메서드를 구현하는 사용자 정의 클래스를 작성합니다.
  2. BaseNavigationProfile 또는 NavigationProfile 클래스에서 파생되는 클래스를 직접 작성하고 IPathEventListObserver 클래스의 인스턴스에 대한 포인터를 반환하도록 BaseNavigationProfile::GetSharedPathEventListObserver()를 구현합니다.
  3. NavigationProfile을 사용하도록 WorldBots를 설정합니다. 자세한 내용은 경로 따르기 사용자 정의을(를) 참조하십시오.

코드 예제는 Tutorial_NavTag.cpp 파일을 참조하십시오.

예제 구현은 DefaultPathEventListObserver 클래스를 참조하십시오. 위에 설명된 대로 사용자 고유의 관측자를 제공하지 않은 경우에는 기본 NavigationProfile 클래스에서 NavGraph 정점에 해당하는 각 이벤트 또는 NavMesh의 외부 경계를 교차하는 경로 가장자리와 NavMesh 간의 전환을 체크 포인트로 표시하는 DefaultPathEventListObserver 인스턴스를 사용합니다. 이렇게 하면 기본적으로 캐릭터가 지름길로 가지 않고 NavGraph 가장자리에 접근하여 이를 따라 이동합니다. 사용자 고유의 구현에서 이 동작을 유지하려면 DefaultPathEventListObserver에서 클래스를 파생시키고 사용자 고유의 클래스에 있는 메서드에서 해당 인터페이스 구현을 호출하는 것이 좋습니다.

체크 포인트에 대한 자세한 내용은 체크 포인트 사용을(를) 참조하십시오.