NavMesh作成
概要
NavMesh(ナビゲーションメッシュ)とはナビゲーション情報が 書き込まれたメッシュで、ナビメッシュと略して呼ばれることもあります。 このメッシュを使用することでキャラクター等のオブジェクトを障害物に 当たることなく目的の位置まで移動させることができます。
環境
Unity 2018.3.8.f1
ステージを用意する
NavMeshはCGの方が用意したステージ用のメッシュや PlaneやBoxなどUnityで使用できるメッシュを利用します。 なので、まずはNavMeshとして利用するステージを用意します。 以下はNavMeshを作成するために作成したステージです。 茶色の平面が地面、青の円柱が障害物と考えてください。
サンプルパッケージ
こちらから上の画像と同じ構成のステージのパッケージをダウンロードできますので、 時間がない方などはご使用ください。
ウィンドウを開く
Navigationの設定関連はNavigationウィンドウで行います。 このWindowは「上段メニューのWindow」=> 「AI」=>「Navigation」で表示されます。 ※UnityのバージョンでWindowからの内容が異なります。
Navigation static設定
NavMeshとして使用する地形と障害物のオブジェクトは 「Navigation static」の設定をする必要があります。 この設定をオブジェクト単位で行うことでこの後に行うBakeで オブジェクトがナビゲーション対象のメッシュか否かを判断します。
チェックを入れる
Navigationのウィンドウを開いたら「Object」の項目をクリックして、 「Navigation Static」の項目にチェックをいれます。 これは対象の地形と障害物のオブジェクト全てに対して行います。
一括選択
「チェックを入れる」項目は1つ1つにオブジェクトに対してのチェックの入れ方の 説明を行っていますが、下の画像のようにオブジェクトを一括りで 階層(親子)関係にしたら、一括で「Navigation Static」の設定が可能です。 ※一番上の階層(親)になっているStageは空のゲームオブジェクトです。 空のゲームオブジェクトはCreateEmptyで作成できます。 一番の上のオブジェクトをクリックしてInspectorを表示して、 オブジェクト名の隣の▼アイコンをクリックします。 デフォルトは「Nothing」が選択されていますので、 「Navigation Static」をクリックします。 クリックすると、子どものオブジェクトにも今回のクリックの影響を 反映していいかどうかを尋ねるダイアログが表示されるので、 問題がなければ「Yes, change children」をクリックします。 これで階層構造になっている全てのオブジェクトに 「Navigation Statice」の設定が行われました。
エリアの設定
NavigationStaticの設定が完了したら、次は「NavigationArea」の設定をします。 NavigationAreaはオブジェクトが移動可能な場所かどうか等を設定する項目です。 デフォルトで「Walkable」「Not Walkable」「Jump」があります。
項目 | 説明 |
---|---|
Walkable | 移動可能エリア |
Not Walkable | 移動不可エリア |
Jump | 自動的に作成されたOffMeshLinkに 設定されるエリア |
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の項目と同じです。
項目 | 説明 |
---|---|
Agent Radius | 壁などにどの程度近づけるかの距離 |
Agent Height | 手がとどく高さ(低さ) |
MaxSlope | 登ることができる斜面の角度 |
Step Height | 踏み越えることができる障害の高さ |
Bakeする
AgentSizeまで完了したら最後にBakeボタンを押してNavMeshを作成します。 作成されたNavMeshはAssetsの中に保存されます。 このファイルの保存場所はシーンファイルの階層上に シーン名のフォルダが自動で作成されており、そこに保存されています。 Bakeにより作成されたNavMeshが適応されたエリアは 以下のようにScene画面で視覚的に確認できます。
注意点
エリアに問題がある場合はBakedAgentSizeなどを修正後、 必ずBakeを実行してNavMeshを作り直してください。 そうしないと修正の内容がNavMeshに反映されません。
次のステップへ
NavMeshを作成したら次はNavMeshによってオブジェクトを移動させましょう。 こちらに移動についての内容を書いています。