動的な障害物や TagVolume を使用する

Gameware Navigation は、World 内の動的な障害物と破壊可能な障害物の存在を処理する 2 通りの方法を提供します。どちらの方法を使用するかは、障害物が移動しているかどうかによって異なります。

障害物クラス

障害物を表すために使用できるクラスには、次の 3 種類があります。

TagVolume

TagVolume クラスは、動かない物理的な障害物、またはその範囲が常に NavMesh に統合される抽象ゾーンを表します。

TagVolume は、オブジェクトの初期化で設定した NavTag で覆われた NavMesh のエリアにタグを付けます。この NavTag は「排他的」としてフラグを付けることができます。これは、移動できないエリアをマークするフラグで、実際には NavMesh 内に穴を開けます。別の方法として、整数データ値のカスタム配列を使って範囲にタグを付けることもできます。これにより、パスファインディング、パス フォローイング、およびクエリ実行時に、この値の取得と処理が可能です。NavTag システムの詳細については、「カスタム データでタグ付けする」を参照してください。

たとえば、右の TagVolume には排他的としてフラグが設定されています。左側では、カスタム データを使って NavMesh にタグが付けられています。デフォルトでは歩行可能ですが、パス追従時に NavTag を検出し、対応することができます。

このクラスを直接使って、以下の項目を表します。

  • ブロックする物理ボリュームのない障害物またはゾーン (地雷原、洪水エリア、異なる種類の地形から成るゾーンなど)
  • 相対的に停止していて範囲と位置が変化しないと予想される物理的障害物 (樹木、街灯、大きな家具や箱など)

詳細は、「TagVolume を設定する」を参照してください。

CylinderObstacle

CylinderObstacle クラスは、1 つの円柱として表すのがベストな、移動可能な物理オブジェクトを表します。

デフォルトでは、これらのオブジェクトは、ダイナミック回避システムによってのみ考慮されます。その代わり、オブジェクトが固定状態になると、オブジェクトを NavMesh に統合するように要求することが簡単にできます。これは、内部 TagVolume を透過的にスポーンすることで実行できます。

たとえば、左側にあるオレンジ色の複数の円柱は移動していて、ダイナミック回避でのみ考慮されます。他の円柱は固定状態で、NavMesh に統合されます。グレーのエリアの円柱には、排他的と設定された NavTag が付けられていて、緑色のエリアの円柱にはカスタム データ値が設定された NavTag が付けられています。

このクラスを使用して、以下の項目を表現します。

  • プレイヤーがコントロールするキャラクタ
  • 樽や柱などの円柱状オブジェクト(軸がほぼ垂直の場合)

詳細は、「CylinderObstacles を設定する」を参照してください。

BoxObstacle

BoxObstacle クラスは、範囲が固定され、ボックス型のボリュームを持つ、移動可能な、または自由に回転する物理オブジェクトを表します。

デフォルトでは、これらのオブジェクトは、ダイナミック回避システムによってのみ考慮されます。その代わり、オブジェクトが固定状態になると、オブジェクトを NavMesh に統合するように要求することが簡単にできます。これは、内部 TagVolume を透過的にスポーンすることで実行できます。

たとえば、左側にあるオレンジ色の複数のボックスは移動と回転が自由なため、ダイナミック回避でのみ考慮されます。他のボックスは固定状態で、NavMesh に統合されます。グレーのエリアのボックスには、排他的として設定された NagTag が付けられています。茶色のエリアのボックスには、カスタム データ値を持つ NavTag が付けられています。

このクラスを使用して、以下の項目を表現します。

  • 動いている車両
  • 移動できる箱や家具、ドア、爆発後の破片など

詳細は、「BoxObstacle を設定する」を参照してください。

ダイナミック NavMesh のパフォーマンス

TagVolume を NavMesh に統合すると、計算能力が強化されます。CPU のピークを回避するため、この処理は自動的にタイムスライスされますが、新しい TagVolume が NavMesh に直ちに統合されるという保証はありませんし、特定のフレーム数内に統合されるという保証すらありません。

最適なパフォーマンスを得るには: