P1-M02

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

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

1

地面の追加

1.Hierarchy>Create>Planeで経路を作ります。

2.Hierarchy>Create>Capsuleでキャラクターの代わりを作成します。

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

2

マップに動けるエリア(NavMesh)を指定する

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

NavMeshにしたいオブジェクトを選択

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

オブジェクトのNavigationに設定する

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

NavMeshを作成(ベイク)する

選択した状態で、Navigationタブ > Bake を表示させて設定値を決めたら「Bake」ボタンをクリックします。するとNavMeshが作成できます。

→のようになっていればNavMeshの作成は完了です。

NavMeshのBake時の各項目の説明です。項目の値を変えたらその都度「Bake」ボタンをクリックしてNavMeshの再構成が必要です。

 
項目 説明
Agent Radius エージェントの中心が壁などにどの程度近づけるか設定します
Agent Height 空間内でエージェントの手が届く高さ(低さ)です
Max Slope エージェントが登れる斜面の角度です
Step Height エージェントが踏むことができる障害物の高さです
3

NavMeshを使うキャラクターの設定

Navigationを使えるキャラクターの設定を行います。キャラクター側には「Nav Mesh Agent」(ナビメッシュエージェント)をアタッチしていきます。

Hierarchy > Capsule を選択してinspector > Add Component > Nav Mesh Agent をアタッチします。

「Nav Mesh Agent」の設定を→のようにします。

NavMeshのBake時の各項目の説明です。項目の値を変えたらその都度「Bake」ボタンをクリックしてNavMeshの再構成が必要です。

Steering
項目 説明
Speed 移動速度
Angular Speed 方向を変えるときの回転速度
Acceleration 移動速度になるまでの加速度
Stopping Distance ゴール位置、この設定距離まで近づいたらエージェントが停まります
Auto Braking 有効になっていると、目的地点の到着時にエージェントの移動速度が減速する

マウスでクリックした座標にキャラクターが進むようにスクリプトを設定します。

1.キャラクターにアタッチしたNavMeshAgentを取得

2.マウスでクリックしたゲーム上の座標を取得

3.キャラクター(Agent)を座標まで移動させる

4

スクリプトをキャラクターにアタッチ

5

応用

オリジナルの経路を作ってNavMesh作成になれよう。角度や段差のある3Dオブジェクトを作るとNavMeshの挙動をよく理解できるはずだ。

BlenderなどのモデリングソフトやUnityでオリジナル経路を作成してみよう。

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