ナビメッシュエージェント
オフメッシュリンク

ナビメッシュの障害物

NavMesh Obstacle コンポーネントを使うと、空間をナビゲートされているエージェントに回避させる事のできる、動的な障害物を設定できます。物理システムによって制御される樽や木箱が、それら障害物のよい見本です。障害物が動いている間、エージェントは避けようと最善を尽くします。障害物が静止すると、それによって NavMesh に穴ができますが、エージェントは、その周りを迂回するように通り道を変える事ができますし、静止した障害物が通り道をふさいだ場合には、エージェントは他のルートを探し出す事ができます。

プロパティー 説明
Shape 障害物のジオメトリの形: capsule または box
box の場合
   Center トランスフォームの位置に対する相対的な、ボックスの中心
   Size ボックスの大きさ
capsule の場合
   Center トランスフォームの位置に対する相対的な、カプセルの中心
   Radius カプセルの半径
   Height カプセルの高さ
Carve オンになっていると障害物によってナビメッシュ上に穴が作られます。
Carving がオンの場合
   Move Threshold 動いている穴が更新される距離のしきい値
   Time To Stationary 障害物が静止物として扱われるまでの待ち時間
   Carve Only Stationary 有効になっていると、障害物は静止時にのみ穴をつくります。

詳細

NavMesh Obstacles は、ゲーム中、2通りの方法でエージェントのナビゲーションに影響を与える事ができます。

  • Obstructing: carving が有効でない場合、障害物のデフォルトの挙動は多くの点で physics collider に似ています。エージェントは障害物のコリジョンを避けようとしますが、近づいた場合には、障害物にぶつかります。障害物の回避は、環境を棒で感じとろうとするような、とても局所的な演算です。エージェントは、障害物が散乱している環境では、迂回路を見つけられません。このモードは、障害物が常に動いているような状況、例えば、自動車やプレイヤーキャラクターなどで使うのに適しています。
  • Carving: carving が有効の場合、静止している障害物は NavMesh に穴を作ります。動くとその穴は塞がります。NavMesh に穴が作られた場合でも、経路探索は全体を認識しているので、たとえ障害物が散乱した場所でもエージェントをナビゲートできますし、現状のパスが障害物に妨害された場合には、他のルートを見つけ出せます。木箱や樽などのような、通常はナビゲーションを妨害し、プレイヤーや爆発のようなゲームイベントで動くものでは、carving を有効にした方がよいでしょう。

動く障害物のロジック

障害物が移動すると、NavMesh の穴も移動しますが、CPU のオーバーヘッドを減らすために、必要な時にしか穴を再計算しません。再計算方法には、1) 静止時に作成する 2) 動いたら作成する の、2つのオプションがあります。

  • Carve when stationary はデフォルトの挙動です。Carve Only StationaryON になっている時しか使えません。障害物は Carving Move Threshold で設定された距離よりも多く動いたときに処理されます。このとき NavMesh の穴は削除されます。障害物が動きを止め Carving Time To Stationary で設定した秒数よりも静止すると、障害物は静止したと判断され、NavMesh の穴が再生成されます。障害物が動き出すまでエージェントは collision avoidance を使って回避しますが、回避のためのパスは準備しません。このモードは通常、パフォーマンスの観点から最善の選択になります。物理演算によって制御されているゲームオブジェクト(木箱や樽など)との相性もよいです。
  • Carve when moved では Carve Only StationaryOFF のときに、この挙動になります。このモードでは、NavMesh の穴は、障害物が Carving Move Threshold で設定した値よりも多く動いた場合に更新されます。このモードは、歩兵が避けて移動する戦車のような、巨大で動きの遅い障害物に適しています。

参考文献

ナビメッシュエージェント
オフメッシュリンク