NavMesh(ナビメッシュ)作成

環境

Unity 2018.3.8.f1

概要

NavMesh(ナビゲーションメッシュ)とはナビゲーション情報が書き込まれた
メッシュのことで、そのメッシュを使用することで、キャラクターを
壁などに当たることなく目的の位置まで移動させることができます。

NavMeshの作成は既存のステージ用のメッシュを使用したり、
自分たちで用意したオブジェクトを使用して行います。

ステージを用意する

まずはNavMeshとして使用するステージを用意します。
ステージは上で書いているようにCGさんによって作成されたステージでも
自分達でオブジェクトを配置して作成したステージでも構いません。
以下はNavMeshを作成するために作成したステージです。
青の球体は障害物と考えてください。

unity_0198

ウィンドウを開く

Navigationの設定関連はNavigationウィンドウで行います。
このWindowは「上段メニューのWindow」=> 「AI」=>「Navigation」で表示されます。
※UnityのバージョンでWindowからの内容が異なります。

unity_0199

Navigation static設定

NavMeshとして使用する地形と障害物のオブジェクトは「Navigation static」の
設定をする必要があります。

チェックを入れる

ウィンドウを開いたら「Object」の項目をクリックして、
「Navigation Static」の項目にチェックをいれます。
これは対象の地形と障害物のオブジェクト全てに対して行います。

unity_0200

エリアの設定

NavigationStaticの設定が完了したら、次は「NavigationArea」の設定をします。
NavigationAreaはオブジェクトが移動可能な場所かどうか等を設定する項目です。
デフォルトで「Walkable」「Not Walkable」「Jump」があります。
自分でAreaを追加することも可能です。

unity_0204

Navigation Area
項目 説明
Walkable 移動可能エリア
Not Walkable 移動不可エリア
Jump 自動的に作成されたOffMeshLinkに
設定されるエリア
JumpやOffMeshLinkについては別途資料を用意しますので、 今回は「Walkable」「Not Walkable」の設定について注目をしてください。 Floorは「Walkable」Obstacleは「Not Walkable」を設定しています。

Bake

Bakeとは「焼き付け」を意味しており、Unityでは様々な箇所で使われています。
NavMeshでBakeを行うと、設定された情報を元にしてNavigationのための計算を行い、
NavMeshを作成してくれます。
NavigationStaticなどの設定が完了したらNavMeshを作成するためにBakeを行いますが
その前にBakedAgentSizeの設定を行い計算で使用するAgent情報を決定します。

BakedAgentSizeを設定する

AgentというのはNavigationにより誘導されるオブジェクト(Component)の事です。
この「strong class="original">BakedAgentSizeではBakeを行うための計算で使用する
Agentのサイズや移動制限などの設定を行います。
※1.Off Mesh Linksについての設定もできますが、今回は触れません。
※2.BakedAgentSizeは実際のAgentTypesの項目と同じです。

unity_0205

BakedAgentSize
項目 説明
Agent Radius 壁などにどの程度近づけるかの距離
Agent Height 手がとどく高さ(低さ)
MaxSlope 登ることができる斜面の角度
Step Height 踏み越えることができる障害の高さ

Bakeする

AgentSizeまで完了したら最後にBakeボタンを押してNavMeshを作成します。

unity_0201

作成されたNavMeshはAssetsの中に保存されます。

unity_0202

Bakeにより作成されたNavMeshが適応されたエリアは
以下のようにScene画面で視覚的に確認できます。

unity_0203

エリアに問題がある場合はBakedAgentSizeなどを修正後、
再度Bakeを押してNavMeshを作り直してください。