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 は通常、パフォーマンスという意味では最良の選択です。そして、ナビメッシュ障害物を持つゲームオブジェクトが物理演算で制御されている場合、相性の良い選択です。
これを有効にするには、Nav Mesh Obstacle コンポーネントの Carve Only Stationary チェックボックスをオフにします。このモードでは、NavMesh の穴は、障害物が Carving Move Threshold の設定より長い距離を移動した場合に更新されます。このモードは、歩兵が避ける戦車のような、巨大で動きの遅い障害物に適しています。
ノート: NavMesh のクエリメソッドを使用する場合、ナビメッシュ障害物の変更から NavMesh で変更が有効になるまでの間に 1 フレームの遅延があることを考慮してください。
NavMesh Obstacle の作成 - ナビメッシュ障害物の作成の手引き
ナビゲーションシステムの内部的なしくみ - ナビゲーションシステムの一部としてのナビメッシュ障害物の使用法
Nav Mesh Obstacle スクリプトリファレンス - NavMeshObstacle スクリプト API の全解説
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.