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

ナビメッシュ障害物

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 が有効の場合、静止しているナビメッシュ障害物は NavMesh に穴を作り、動いているときは、障害物になります。NavMesh に穴が作られた場合でも、経路探索がナビメッシュエージェントに障害物が散乱している場所を迂回させたり、現在の通り道を障害物がふさいでいる場合に他の経路を見つけたりすることができます。樽や木箱などのように、通常は通路を塞ぎ、プレイヤーや、爆発のようなゲームイベントによって動く場合もあるナビメッシュ障害物では、Carve を有効にした方がよいでしょう。

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

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

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

  • ナビメッシュ障害物が指定距離を超えて移動したときに穴を作成

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

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

Carve Only Stationary is generally the best choice in terms of performance, and is a good match when the GameObject associated with the Nav Mesh Obstacle is controlled by physics.

ナビメッシュ障害物が指定距離を超えて移動したときに穴を作成

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

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

関連項目

  1. NavMesh Obstacle の作成 - ナビメッシュ障害物の作成の手引き

  2. ナビゲーションシステムの内部的なしくみ - ナビゲーションシステムの一部としてのナビメッシュ障害物の使用法

  3. Nav Mesh Obstacle スクリプトリファレンス - NavMeshObstacle スクリプト API の全解説

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