各 Bot によって所有されている LivePath は、パスに沿ってさまざまなタイプのイベントのリストを保持します。
これらの各イベントは、PathEvent オブジェクトによって表されます。LivePath は PathEventList を維持します。これは、PathEvent のインデックス付きリストと、イベント間の「インターバル」のインデックス付きリストです。PathEvent オブジェクトが維持するデータ メンバを使って、そのオブジェクトが表すイベント タイプの決定、3D 位置の検索、チェック ポイントの状態の取得と設定 (「チェック ポイントを使用する」参照) などを実行できます。
Bot::GetPathEventList() を呼び出すことで、LivePath 上のイベントのフル リストを取得できます。次に、リスト内のすべてのイベントに繰り返し、PathEventList クラスのメソッドを使用することができます。
PathEvent のフル リストには、Bot の現在の位置とターゲット ポイントの背後に隠されたイベントが含まれています。たとえば、その下限であったり、Bot が既に通過したイベント、ショートカットを選択して通過したイベントなどです。どのイベントが今後発生し、どのイベントが既に発生したかを知りたい場合があります。たとえば、特定の範囲内で、今後どのようなイベントがパスに沿って配置されているかだけを知りたい場合などです。
現在のターゲット ポイントを使用して、どのイベントが Bot の前方に配置されているかを知ることができます。
また PositionOnLivePath::GetNextPathEventIdx() と PositionOnLivePath::GetPrevPathEventIdx() を呼び出すこともできます。ただし、戻り値を解釈する方法についての詳細は、『API リファレンス』の説明を参照してください。
多くの場合、実際に認識する必要がある情報の項目は、次のイベントに関連付けられている NavTag だけです。たとえば、その NavTag がスマート オブジェクトに関連付けられている場合、Bot からスマート オブジェクトに指示を求めることが望ましいことがあります。
PathEventList と直接対話せずに、Bot::GetUpcomingEventNavTag() を呼び出すだけで、次のイベントの NavTag を特定できます。
特定の条件をテストするために、パス イベントのリストをアクティブに確認するのではなく、Bot を初期化した場合のカスタム イベント オブザーバ オブジェクトを登録することができます。Bot が PathEventList の作成、更新、破棄を実行する場合に、このオブザーバのメソッドを呼び出すため、新しいパス上のイベントに対応できます。
これはカスタム スマート オブジェクトの付いた Bots の登録と登録解除など、行われる必要があるカスタムの初期化ステップを実行する場合に有効なことがあります。たとえば、新しいパスで、ゲームプレイ中に閉じることがあるドアを使用する場合、ドアをコントロールするオブジェクトに Bot を登録することができます。ドアを閉じると、ドアを使用する予定だったキャラクタにそのことを通知できます。パスの再計算をトリガすることで、キャラクタはこれに対応できます。
コード サンプルについては、Tutorial_NavTag.cpp ファイルを参照してください。
実装サンプルについては、DefaultPathEventListObserver クラスを参照してください。前述のように、ユーザ独自のオブザーバを提供しない場合、デフォルトの NavigationProfile クラスは DefaultPathEventListObserver のインスタンスを使用します。このインスタンスは、NavMesh と NavMesh の外側境界を越えるパス エッジ間の NavGraph の頂点またはトランジションに対応する各イベントを、チェック ポイントとしてマークします。デフォルトでは、これがキャラクタのアプローチとなり、ショートカットを行わずに、NavGraph エッジをたどります。ユーザ独自の実装でこの動作を保持するには、DefaultPathEventListObserver からクラスを派生させ、ユーザ独自のクラス内のメソッドからインタフェースのこの実装を呼び出すことを検討してください。
チェック ポイントの詳細については、「チェック ポイントを使用する」を併せて参照してください。