Version: 2023.1
言語: 日本語
NavMesh Agent
Off Mesh Link

Nav Mesh Obstacle

Nav Mesh Obstacle コンポーネントを使うと、ナビメッシュエージェント がゲーム世界を移動する間に避けるべき移動する障害物を設定できます。物理システムによって制御される樽や木箱などが、その例です。障害物が動いている間、エージェントはできる限り避けようとします。障害物が静止状態のときは、NavMesh に穴を作ります。エージェントは、その周りを迂回するように通り道を変えたり、静止した障害物が完全に通り道をふさいでいる場合には、他のルートを探したりします。

プロパティ 機能
Shape 障害物ジオメトリの形。オブジェクトの形に最も近いものを選択します。
    Box
        Center Transform 位置に相対的なボックスの中心
        Size ボックスの大きさ
    Capsule
        Center Transform 位置に相対的なカプセルの中心
        Radius カプセルの半径
        Height カプセルの高さ
Carve これを有効にすると、ナビメッシュの障害物によって NavMesh 上に穴が作られます。
    Move Threshold Unity は、ナビメッシュの障害物が Move Threshold によって設定された距離以上動くと、移動したものとして扱います。このプロパティを使用して、穴の位置を更新するための閾値となる距離を設定します。
    Time To Stationary 障害物が静止物として扱われるまでの待ち時間 (秒)
    Carve Only Stationary 有効になっていると、障害物が静止している時にのみ穴が作られます。

説明

ナビメッシュ障害物は、ゲーム中、障害物と穴、2 通りの方法でエージェントの移動に影響を与える事ができます。

障害物

Carve が有効でない場合、ナビメッシュ障害物のデフォルトの挙動はコライダーに似ています。エージェントはナビメッシュ障害物と衝突するのを避けようとしますが、近い場合には衝突します。障害物の回避は、とても初歩的で小さな半径で行われます。そのため、エージェントは、障害物があちこちにあるような環境では、迂回路を見つけられない場合があります。このモードは、障害物が常に動いているような状況、例えば、自動車やプレイヤーキャラクターなどで使うのに適しています。

Carve が有効の場合、静止している障害物はナビメッシュに穴を作ります。動いているときは、障害物が妨害を行います。ナビメッシュに穴が作られた場合でも、経路探索はナビメッシュエージェントに障害物が散乱している場所を迂回させたり、現在の通り道が障害物でふさがれた場合は他の経路を見つけたりすることができます。一般にナビゲーションを妨げる 障害物に対しては、カービングをオンにすることをお勧めします。一般にナビゲーションを妨げるナビメッシュ障害物に対しては、Carve を有効にしておくことをお勧めします。ただし、プレイヤーや爆発などの他のゲーム イベント (木箱や樽など) によって移動される可能性があります。

動くナビメッシュ障害物のロジック

Unity は、ナビメッシュ障害物が Carve > Move Threshold で設定した距離を超えて移動したときに、移動したとして処理します。ナビメッシュ障害物が動くと、くり抜かれた穴も動きます。ただし、CPU オーバーヘッドを減らすために、必要なときのみ穴を再計算します。この計算の結果は、次のフレーム更新で反映されます。再計算ロジックには 2 つのオプションがあります。

  • ナビメッシュ障害物が静止状態のときのみ穴を作成

  • ナビメッシュ障害物が移動したときに穴を作成

ナビメッシュ障害物が静止状態のときのみ穴を作成

これがデフォルト動作です。これを有効にするには、Nav Mesh Obstacle コンポーネントの Carve Only Stationary チェックボックスをオンにします。このモードでは、ナビメッシュ障害物が動くと作られた穴はふさがれます。ナビメッシュ障害物が移動をやめ、 Carving Time To Stationary で設定した時間より長く静止すると静止していると判断され、穴が再び更新された位置に作成されます。ナビメッシュ障害物が動いている間、ナビメッシュエージェントは衝突回避を使用して障害物を回避しますが、迂回経路の計画はしません。

Carve Only Stationary は通常、パフォーマンスという意味では最良の選択です。そして、ナビメッシュ障害物を持つゲームオブジェクトが物理演算で制御されている場合、相性の良い選択です。

ナビメッシュ障害物が移動したときに穴を作成

これを有効にするには、Nav Mesh Obstacle コンポーネントの Carve Only Stationary チェックボックスをオフにします。このモードでは、NavMesh の穴は、障害物が Carving Move Threshold の設定より長い距離を移動した場合に更新されます。このモードは、歩兵が避ける戦車のような、巨大で動きの遅い障害物に適しています。

ノート: ナビメッシュのクエリメソッドを使用する場合、ナビメッシュ障害物の変更から NavMesh で変更が有効になるまでの間に 1 フレームの遅延があることを考慮に入れる必要があります。

その他の参考資料

NavMeshObstacle

NavMesh Agent
Off Mesh Link