【UNITY】[NavMesh 1] 障害物をよけて目的地まで進むには


キャラクターを経路に沿わせて移動させたり、障害物を避けながら目的地に移動させるには「NavMesh」を使うと便利です。今回は「NavMesh」(ナビメッシュ)の使い方を説明していきます。
地面の追加
1.Hierarchy>Create>Planeで経路を作ります。
2.Hierarchy>Create>Capsuleでキャラクターの代わりを作成します。

→のように配置できましたか?オリジナルのマップをつくっても大丈夫です。

マップに動けるエリア(NavMesh)を指定する
キャラクターが歩くことのできるエリア(NavMesh)を作っていきます。※青く表示されているところが歩くことが可能なエリアです。

歩かせたいオブジェクトすべてを選択します。ここでは3つのPlaneを選択します。

オブジェクトのNavigationに設定する
選択した状態で、Navigationタブ > Object を表示させて、「Navigation Static」にチェックをいれます。また、「Navigation Area」がWalkable(歩行可能)になっているかどうがを確認します。
NavMeshを作成(ベイク)する

NavMeshのBake時の各項目の説明です。項目の値を変えたらその都度「Bake」ボタンをクリックしてNavMeshの再構成が必要です。
項目 | 説明 |
---|---|
Agent Radius | エージェントの中心が壁などにどの程度近づけるか設定します |
Agent Height | 空間内でエージェントの手が届く高さ(低さ)です |
Max Slope | エージェントが登れる斜面の角度です |
Step Height | エージェントが踏むことができる障害物の高さです |
NavMeshを使うキャラクターの設定

NavMeshのBake時の各項目の説明です。項目の値を変えたらその都度「Bake」ボタンをクリックしてNavMeshの再構成が必要です。
項目 | 説明 |
---|---|
Speed | 移動速度 |
Angular Speed | 方向を変えるときの回転速度 |
Acceleration | 移動速度になるまでの加速度 |
Stopping Distance | ゴール位置、この設定距離まで近づいたらエージェントが停まります |
Auto Braking | 有効になっていると、目的地点の到着時にエージェントの移動速度が減速する |

マウスでクリックした座標にキャラクターが進むようにスクリプトを設定します。
1.キャラクターにアタッチしたNavMeshAgentを取得
2.マウスでクリックしたゲーム上の座標を取得
3.キャラクター(Agent)を座標まで移動させる
応用
オリジナルの経路を作ってNavMesh作成になれよう。角度や段差のある3Dオブジェクトを作るとNavMeshの挙動をよく理解できるはずだ。
BlenderなどのモデリングソフトやUnityでオリジナル経路を作成してみよう。


今回マウスでクリックした位置を算出するのにRayCastを使っている。そのためオリジナル3Dモデルを使った場合、必ずColliderを追加しよう。Colliderがないと座標が割り出せなくてキャラクターは動かないよ。