投稿

1月, 2014の投稿を表示しています

[Unity]ナビメッシュでの経路探索の使い方と注意点

イメージ
Unity で簡単に経路探索を実装するにはナビメッシュが便利です。

今回は、基本的な使い方と、使ってみた上での注意点などを書いていきます。

基本 ナビメッシュを使うと、こんな感じで障害物を避けて目的地まで移動させることができます。


(日本語マニュアル)
ナビメッシュおよび経路探索 - Unity Manual

(英語マニュアル)
Unity - Navigation Meshes

現時点で日本語マニュアル(ちょっと古い?)には Pro のみと書いてありますが、英語マニュアルには書いていないので使えるみたいです。

(多分。英語でもページによって Pro only と書いてあったりします。 Unity - Pathfinding とか Unity - NavMesh Layers とか。Free 版での動作は未確認。)


とりあえず移動させるだけなら
シーンに床や障害物を置くそれらを Navigation Static にする(インスペクタ右上。Static チェックで OK、下三角マークで詳細)メニュー -> Window -> Navigation -> Bake タブ -> Bake ボタンで通れる場所を焼き込み移動させたいオブジェクトに NavMeshAgent コンポーネントをつける自前のスクリプトで、移動させたいオブジェクトの NavMeshAgent を取得して目的地を SetDestination で指定する と簡単です。


さらに、
メッシュ上は離れてしまっている経路を結ぶオフメッシュリンク - Unity Manual地形ごとの移動コストを設定する(川は渡れるけど好まない等)ナビメッシュレイヤー - Unity Manual固定でない障害物を避けて移動する(人や自動ドアなど)ナビメッシュ障害物 - Unity Manual といったこともできます。

注意点 ここから注意点などです。

微調整が効かないBake したナビメッシュ自体の手動調整はできませんBake 時の設定やナビメッシュレイヤー、Navigation Static のオンオフ、果てはオブジェクト自体の位置を微調整して Bake を繰り返すことになります
微妙に浮く下の画像のように、焼き込んだナビメッシュが床から離れることがあります
おそらく壁や手すりが悪さをしているのだと思いますが…