NavMesh Agent を他のコンポーネントと共に使う
ナビメッシュの障害物

ナビメッシュエージェント

NavMeshAgent コンポーネントは、相互に回避しながら目的地点に向かって進行するキャラクターの作成に利用できます。エージェントはナビメッシュを使ってゲーム世界の状況を判断し、それを基づき他のエージェントや障害物を回避することができます。経路探索や空間の判断は、ナビメッシュ エージェントのスクリプト API によって行われます。

プロパティー

プロパティー 説明
Agent Size
Radius エージェントの半径は、障害物や他のエージェント間の衝突の計算に使用されます。
Height 頭上にある障害物の下を通り抜けるのにエージェントが必要とする高さ。
Base offset トランスフォーム ピボット ポイントに対するコリジョン シリンダー(円筒)のオフセット。
Steering
Speed 動きの最高速度(単位: メートル/秒)。
Angular Speed 回転の最高速度(単位: 度/秒)
Acceleration 最高加速度(単位: メートル/秒の平方)
Stopping distance ゴール位置に、この設定距離まで近づいたらエージェントが停まります。
Auto Braking 有効になっていると、目的地点の到着時にエージェントの移動速度が減速します。巡回のような、エージェントが複数のポイント間をスムーズに移動する必要がある場合には無効にする必要があります。
Obstacle Avoidance (障害物回避)
Quality 障害物回避の品質。エージェントの数が多い場合には障害物回避の品質を落とすことで CPU 時間を節約することができます。回避を None に設定するとエージェント同士が衝突しなくなりますが、他のエージェントが障害物を積極的に回避するようになる訳ではありません。
Priority エージェントは、回避においてこの数値より低いエージェントを無視するようになります。値は 0~99 の間で設定し、数字が小さいほど優先度が高いことを意味します。
Path Finding (経路の探索)
Auto Traverse OffMesh Link オフメッシュリンクを自動で越えるようにしたい場合はオンにしてください。オフメッシュリンクを越えるのにアニメーションなどの特定の方法を使用したい場合はオフにしてください。
Auto Repath 有効になっていると、エージェントは部分的な経路の終了地点へ到達した際に、再度経路の探索を行います。目的地への経路がない場合は、目的地にもっとも近い到達可能場所への部分的な経路が作成されます。
Area Mask Area Mask は、エージェントが経路を探索する際にどのナビゲーションエリアとコスト を確認するかを設定します。ナビメッシュのベーキング用にメッシュを準備する際に、各メッシュにエリアタイプを設定できます。例えば、階段を特殊なエリアタイプでマスクし、一部のキャラクターはその階段を使えないようにしたりすることが可能です。

詳細

エージェントは直立円筒形で定義されます。円筒の大きさは Radius および Height プロパティーで指定できます。この円筒はオブジェクトと共に動きますが、オブジェクト自体が回転しても常に直立状態を保ちます。円筒の形が、他エージェントや障害物との間のコリジョンの検知やそれに対する反応に使用されます。GameObject のアンカーポイントが円筒の底部に位置しない場合、Base Offset プロパティーを使用して高さの差を相殺することができます。

円筒の高さと半径の設定は、2つの 異なる場所で行えます。ナビメッシュの作成、および個々のエージェントのプロパティーから設定が可能です。

  • NavMesh Bake 設定では、すべてのナビメッシュ エージェントの、静的ワールド ジオメトリ(地形)における衝突と回避のパターンを設定できます。メモリーの使用量や CPU 負荷を抑えるため、ベークの設定ではひとつのサイズのみ設定可能になっています。
  • NavMesh Agent プロパティーの値は、動く障害物や他エージェントとの衝突のしかたを設定できます。

エージェントのサイズは、よっぽどのことがない限り2箇所とも同じ値にします。ただし、例えば、重量のある兵士がいる場合、半径を大きくし他の兵士がぶつからないようにしなければいけません。そうしなければ回避方法に支障が出てきます。

参考文献

NavMesh Agent を他のコンポーネントと共に使う
ナビメッシュの障害物