Unity の NavMesh を使って目的地まで移動させてみた

障害物を避けながら移動する仕組み NavMesh を試してみた経過を、スクリーンショットに適当なコメントをつけながら紹介します。

作ろうとしたもの

障害物を避けながら移動する何か。

途中経過

MoveToGoal_objects

とりあえず、移動する物体と障害物になる予定のブロックを用意しました。

MoveToGoal_0

障害物はプレハブ化して、ランダムな位置に配置しました。 このスクリーンショットのように、初期位置が他のブロックと重なると場外に落下することがあります。 諸行無常です。

できたもの

MoveToGoal_1 MoveToGoal_2 MoveToGoal_3

で、Nav Mesh を地面に適用し、Nav Mesh Agent を赤い球に適用し、Nav Mesh Obstacle をブロックに適用しました。

で、クリックした位置を指定して SetDestination() を呼び出すと、赤い球がちゃんと動くのが確認できました。

これらのスクリーンショットから移動の様子を読み取るのは不可能だと思いますが、動画を用意するのは

めんどう

なので、このままでよいことにします。

感想、今後の予定

Unity すごい。 C++ で書くと面倒で仕方がない処理が調べながらでも2時間くらいで実装できるの、やっぱりすごいです。

ただ、移動については速度や加速度を調整しないと障害物間際でプルプルしたりします。

今回のソースコードは、下記プロジェクトのリポジトリ中の MoveToGoal です。
https://bitbucket.org/satofumi/unity_learning