カスタム データでタグ付けする

NavTags と呼ばれるカスタム データを使用して、NavData の任意のエリアにタグ付けすることができます。これを使うとキャラクタが実行時にエリア内のパスをプランしてたどる方法に影響を与えることができます。例:

たとえば次のイメージは、いくつかの異なるタイプの NavTags で地形が設定されていることを示しています。

NavTag データ形式

各 NavTag には次のものが含まれています。

NavTags は次のいずれかによって表されることがあります。

生成時に NavTags を埋め込む

地形用に事前生成する静的 NavData に NavTags を埋め込むには複数の方法があります。

個別のトライアングルにタグを付ける

GeneratorInputProducer クラスが NavData 生成システムにトライアングルを提供するたびに、そのトライアングルに特定のタイプの NavTag でタグを付けることができます。

  • ClientInputConsumer::ConsumeTriangleFromPos() メソッドまたは ClientInputConsumer::ConsumeTriangleFromPosInClientCoordinates() メソッドを呼び出し、パラメータとして NavTag を渡します。

TagVolumes を指定する

GeneratorInputProducer クラスは、どの NavTags がボリュームと交差するすべてのトライアングルに対して適用されるべきかを決めるボリュームを指定することができます。この方法を使用するには:

  1. ClientInputTagVolume クラスのインスタンスを作成します。
  2. ClientInputTagVolume::Init() への呼び出しで、コンタ、高度、および NavTag データを使用してインスタンスを設定します。
  3. ClientInputConsumer::ConsumeTagVolume() への呼び出しでボリュームを指定します。

実行時に NavTags を動的に追加する

NavTags は実行時に動的に追加できます。それには、TagVolumes を生成して Databases に割り当てるか、動的障害管理システムによって提供される動的な BoxObstacle クラスと CylinderObstacle クラスを使用します。新しい TagVolume または障害物のエリアの NavMesh は、カスタム NavTag を反映するように自動的に再生成され、再三角形化されます。

詳細は、「動的な障害物や TagVolume を使用する」を参照してください。

NavTag カラー

NavTag に基づいて三角形と TagVolume をレンダリングするためのカラーを選択することができます。このようなカラーは NavTag をすばやく識別するのに役立ちます。

次の関数を使用して DynamicNavTag カラーを設定することができます。

NavTag を排他に設定した場合、そのカラーは次の図に示すように自動的に赤に設定されます。

注:生成 TagVolume またはランタイム TagVolume の NavTag を指定する方法は、次の図に示すように変更されています。パネルの NavTag 表示も、NavTag カラーをサポートするために変更されています。

さらに、ランタイム TagVolume のデフォルトのカラーが、次の図に示すように暗いオレンジ色になっています。

NavTag カラーの次のパラメータが、GeneratorAdvancedParamaters クラスに追加されます。

これらのカラーは、生成時に自動的に NavTag に設定されます。m_emptyDefaultNavTagColor パラメータまたは m_nonEmptyDefaultNavTagColor パラメータは、デフォルトの NavTag が空であるかどうかに応じてデフォルトの NavTag に設定されます。これはデフォルトですべての三角形に適用されます。

m_nonDefaultNavTagColor パラメータは、次の場合に NavTag に設定されます。

三角形や TagVolume を追加する前に NavTag のカラーを変更した場合、m_nonDefaultNavTagColor パラメータは設定されません。

これらのカラーは、Navigation Lab の Advanced Parameters パネルで変更することができます。次の図を参照してください。

次のメソッドが DynamicNavTag クラスに追加されます。

NavGraphs にタグ付けする

地形に NavGraphs を使用する場合は、頂点とエッジにも NavTags でタグを付けることができます。

  1. NavGraph の設定に使用する NavGraphBlobBuilder を作成したら、NavGraphBlobBuilder::AddNavTag() のシーケンシャルな呼び出しに、NavGraph の頂点またはエッジに追加する各タイプの NavTag のインスタンスを渡します。NavTag の各タイプは、メソッドによって返されるインデックスで識別されます。
  2. 頂点またはエッジを追加するたびに、NavGraphBlobBuilder::AddVertexWithNavTag() メソッド、NavGraphBlobBuilder::AddBidirectionalEdgeWithNavTag() メソッド、または NavGraphBlobBuilder::AddMonodirectionalEdgeWithNavTag() メソッドを使用して、頂点またはエッジにタグ付けする NavTag のタイプに対応するインデックスを渡します。

NavGraph を作成する」を参照してください。

マージと衝突を処理する

異なる NavTags でタグ付けされた 2 つ以上のエリアがオーバーラップする場合、NavTags はマージされません。代わりに、NavTag クラスの < 演算子を呼び出すことによって下位にあると判定された NavTag が保持されます。

たとえば次のイメージでは、排他的ボリュームがオレンジ色のボリュームより低く、オレンジ色のボリュームが緑色のボリュームより低く、緑色のボリュームが青色のボリュームより低くなっています。

詳細については、navtag.h ファイルの実装を参照してください。