P1-M02

【UNITY】[NAVMESH 2] ナビメッシュで障害物やジャンプポイントなどを設定する

今回は、ボールを弾くフリッパーと呼ばれる部品を追加します。
1

障害物の作成

キャラクターがよけて通る場所(障害物)を作りっていこう。ここではCUBEを使って作ってみた。

CUBEにAdd Component > Nav Mesh Obstacle(ナビメッシュオブスタクル:ナビメッシュ障害物)を追加します。

その際にCarveにチェックを入れましょう。障害物周りの経路が正しくエージェントに認識されます。

図のようにな障害物周りにナビメッシュに穴ができます。これで障害物の出来上がりだ。

2

段差の行けるいけないを調整する

こんどはどのくらいの段差まで通れるようにするかを調整しよう。

図だとこの階段は通れなくなっています。それでは階段ではないので通れるようにナビメッシュを調整していこう。

ナビメッシュの段差の調整

ナビメッシュで階段など、どのくらいの高さの段差まで通れるかを調整するのには「Step Height」(ステップハイ:段の高さ)を変更します。

1.「Step Height」の数値を変える

2. 「Bake」ボタンをおす

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

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

うまく調整できると図のように階段も通れるようになるぞ。

3

ジャンプできる場所をつくる

ナビメッシュマップ内でジャンプさせたいときがあると思う。そんなときは「Off Mesh Link」コンポーネント を利用するといいぞ。

ジャンプして渡るための離れたNavMeshを作る

ジャンプして渡るような離れたNavMeshエリアを作りましょう。

1. Create > 3D Object > Plane で地面を作る。

2. 図ようにはなれた場所に移動する。

3. 追加したPlaneを選択し、Navigation > Object >「Navigation Static」をチェックする

4.  Navigation > Bake >「Bake」ボタンをクリックする

追加したエリアもNavMeshに追加されればOKだ

リンクの始点終点を作る
リンクの始点終点を作る

1. ジャンプリンクのジャンプさせたい場所、着地させたい場所にそれぞれCylinderなどのオブジェクトを作る

2. 作ったCylinderひとつにAdd Component > Off Mesh Link を追加する 

3. 作った「Off Mesh Link」のStart(始点)、End(終点)にそれぞれジャンプ場所と着地場所にあるCylinderを設定する

4. すると図のようにオフメッシュリンクが設定される

5. Cylinderは見えている必要がないため見えないようにする

各シリンダーの「Mesh Renderer」と「Capsule Collider 」のチェックを外しておこう

6. リンクの高さがあっていない場合は高さを調整しよう

図のようにリンクの黒い丸がしたすぎたり、もしくは上すぎたりしている場合はなおそう。キャラクタの行動がおかしくなるためだ。

調整すると図のように表示される

最後に再生してみて実際に渡れるかどうかをみよう

最後にリンクのあるところからしかジャンプできないためリンクは動きが不自然にならないように複数設置することをおすすめする。必要ならななめジャンプのリンクもつけるとより自然な動きになる