NavMesh作成



概要

NavMesh(ナビゲーションメッシュ)とはナビゲーション情報が
書き込まれたメッシュで、ナビメッシュと略して呼ばれることもあります。
このメッシュを使用することでキャラクター等のオブジェクトを障害物に
当たることなく目的の位置まで移動させることができます。

環境

Unity 2018.3.8.f1

ステージを用意する

NavMeshはCGの方が用意したステージ用のメッシュや
PlaneやBoxなどUnityで使用できるメッシュを利用します。
なので、まずはNavMeshとして利用するステージを用意します。
以下はNavMeshを作成するために作成したステージです。
茶色の平面が地面、青の円柱が障害物と考えてください。

unity_0198

サンプルパッケージ

こちらから上の画像と同じ構成のステージのパッケージをダウンロードできますので、
時間がない方などはご使用ください。

ウィンドウを開く

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

unity_0199

Navigation static設定

NavMeshとして使用する地形と障害物のオブジェクトは
「Navigation static」の設定をする必要があります。
この設定をオブジェクト単位で行うことでこの後に行うBakeで
オブジェクトがナビゲーション対象のメッシュか否かを判断します。

チェックを入れる

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

unity_0200

一括選択

「チェックを入れる」項目は1つ1つにオブジェクトに対してのチェックの入れ方の
説明を行っていますが、下の画像のようにオブジェクトを一括りで
階層(親子)関係にしたら、一括で「Navigation Static」の設定が可能です。
※一番上の階層(親)になっているStageは空のゲームオブジェクトです。
 空のゲームオブジェクトはCreateEmptyで作成できます。

unity_0242

一番の上のオブジェクトをクリックしてInspectorを表示して、
オブジェクト名の隣の▼アイコンをクリックします。
デフォルトは「Nothing」が選択されていますので、
「Navigation Static」をクリックします。

unity_0243

クリックすると、子どものオブジェクトにも今回のクリックの影響を
反映していいかどうかを尋ねるダイアログが表示されるので、
問題がなければ「Yes, change children」をクリックします。

unity_0244

これで階層構造になっている全てのオブジェクトに
「Navigation Statice」の設定が行われました。

unity_0245

エリアの設定

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

unity_0204

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

Bake

Bakeとは「焼き付け」を意味しており、Unityでは様々な箇所で使われています。
今回のNavMeshではメッシュにナビゲーション情報を焼き付けると意味で
使われていますが、イメージがしづらい人は「Create」や「Make」と考えると良いと思います。

NavMeshでBakeを行うと設定された情報を元にしてNavigationを実行するための
計算を行い、NavMeshを作成してくれます。
NavigationStaticなどの設定が完了したらNavMeshを作成するためにBakeを行いますが
その前にBakedAgentSizeの設定を行い計算で使用するAgent情報を決定します。

BakedAgentSizeを設定する

AgentというのはNavigationにより誘導されるオブジェクト(Component)の事です。
この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を作り直してください。
そうしないと修正の内容がNavMeshに反映されません。

次のステップへ

NavMeshを作成したら次はNavMeshによってオブジェクトを移動させましょう。
こちらに移動についての内容を書いています。