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

ナビメッシュの障害物

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

プロパティー 説明
形状 障害物のジオメトリの形: capsulebox
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 で設定した値よりも多く動いた場合に更新されます。このモードは、歩兵が避けて移動する戦車のような、巨大で動きの遅い障害物に適しています。

参考文献

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