チェック ポイントを使用する

チェック ポイントとは、パス フォローイングシステムによって検証されるまで、到達したとみなされない、パスに沿ったイベントです。チェック ポイントとして、任意の PathEvent をマークすることができます。Bot がターゲット ポイントとしてチェック ポイントを選択すると、チェック ポイントの検証が済むまで、PathFollower はターゲット ポイントからパスに沿って前に進むことはありません。

チェック ポイント システムの一般的な使用事例は、キャラクタがある種のイベントに一定距離まで近づかない限り、パスに沿って前に進めないようにすることです。ただし、システムを拡張して、任意のイベントをチェック ポイントとしてマークしたり、チェック ポイントに達したことを確認するために使用される基準をカスタマイズすることができます。

PathEvents のバックグラウンド情報とその取得方法については、「PathEvent を監視する」を参照してください。

チェック ポイントのデフォルトの動作

チェック ポイントを識別する

デフォルトでは、ユーザが IPathEventListObserver のカスタム クラスを提供しない場合(「PathEvent を監視する」を参照)、Bot は自動的に DefaultPathEventListObserver クラスのインスタンスを使用するように設定されます。次のオブザーバは、チェック ポイントとして設定されます。

  • NavGraph の頂点にリンクされている各イベント
  • NavMesh を、NavMesh の外側の境界を超えるパス エッジに接続する各イベント
  • NavMesh の境界の外側にあるパス内の各ノード

チェック ポイントを検証する

Bot は、IPositionOnPathValidator インタフェースを実装するクラスのインスタンスを使用して、チェック ポイントに到達したタイミングを判断します。ユーザ独自のインプリメンテーションを指定しない場合は、デフォルトでは、Bot が自動的に PositionOnPathCheckPointValidator のインスタンスを使用するように設定されます。このデフォルトのインプリメンテーションでは、BotBot に対して設定された PathFollowerConfig::m_checkPointRadius パラメータ値よりもチェック ポイント イベントに近づいた場合にのみ、チェック ポイントに到達したとみなされます。

ユーザ独自のチェック ポイントを識別する

PathEvent::SetCheckPointStatus() メソッドを呼び出すことで、任意の PathEvent をチェック ポイントとして設定することができます。

// make the event into a check point
m_pathEvent->SetCheckPointStatus(Kaim::CheckPointStatus_EventIsACheckPoint);

// make the event not a check point
m_pathEvent->SetCheckPointStatus(Kaim::CheckPointStatus_EventIsNotACheckPoint);

キャラクタの PathEventList から取得したすべてのイベントに対しては、いつでもこの操作を行うことができます。

チェック ポイントの使用方法によっては、新しいパスが作成されるたびにチェック ポイントのマーキングを自動的に行う IPathEventListObserver のユーザ独自のクラスを作成することもできます。このインタフェースの実装と設定の詳細については、「PathEvent を監視する」を参照してください。デフォルトのオブザーバを変更すると、インプリメンテーションに同じコードをインクルードするか、DefaultPathEventListObserver からクラスを抽出し、親クラス内でメソッドの実装を呼び出さない限り、チェック ポイントとして特定タイプのイベントをマーキングするデフォルトの動作が自動的に変更されます(上記参照)。

チェック ポイントの検証をカスタマイズする

キャラクタに対してチェック ポイントの検証をカスタマイズするには、2 つの方法があります。

距離のしきい値

実行する操作が、チェック ポイントに無事に達したかどうかを決定するしきい値の設定だけの場合は、PathProgressConfig::m_checkPointRadius 設定パラメータに新しい値を設定します。「パス フォローイングをカスタマイズする」を参照してください。

カスタム基準

チェック ポイントに達したことを検証するために、シンプルな距離のしきい値ではなく、独自のカスタム基準を使用するには、次の手順を実行します。

  1. IPositionOnPathValidator インタフェースを実装する独自のクラスを作成します。指定した Bot が指定されたチェック ポイントに達したかどうかをテストするためのロジックをここで設定します。
  2. BaseNavigationProfile クラスまたは NavigationProfile クラスから派生する独自のクラスを作成し、BaseNavigationProfile::GetSharedPositionOnPathValidator() の実装に IPositionOnPathValidator クラスのインスタンスへのポインタを返させます。
  3. 新しい NavigationProfile を使用するように WorldBots を設定します。詳細は、「パス フォローイングをカスタマイズする」を参照してください。