こんにちは、エンジニアのオオバです。

Unityを始めて早3年。
今まで一度も NavMesh を使ったことがなかったので、とりあえず触ってみるという記事です。

NavMeshとはナビゲーション情報をメッシュに書き込んだメッシュで、それを使って知的に動くキャラクターを作成したり、経路探索が出来るようになります。

今回はプレーヤーが障害物を避けてゴールまで辿り着くという、最小限の構成でNavMeshを使ってみるということに焦点を合わせています。

まずはリファレンスを見ながらやってみます。
ナビメッシュの作成 - Unity マニュアル
↑この辺りを参考にいたしました。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

1.NavMeshの準備

NavMeshを生成するためのステージを作ります。

【Unity】NavMeshの始め方_0

このようなシンプルな4つのGameObject構成です。

プレーヤーがゴールを目指して動くわけですが、障害物に当たあらないように設定をします。

2.NavMeshの設定

【Unity】NavMeshの始め方_1

メニュー > Window > Navigation でNavigationウィンドウを表示させ、Objectタブをクリックします。

地面のGameObject(Ground)を選択します。

Object, Bake, Areasと3種のタブからObjectをクリックします。

Navigation Staticチェックボックスにチェックを入れ、Navigation Areaプルダウン からWalkableを選びます。

【Unity】NavMeshの始め方_2

次に障害物GameObject(Obstacle)を選択し、同様にNavigation Staticチェックボックスにチェックを入れます。Navigation Areaプルダウン ではNot Walkableを選びます。

3.設定情報を元にNavMesh生成

【Unity】NavMeshの始め方_3

BakeボタンをクリックしてNavMeshを生成します。

【Unity】NavMeshの始め方_4

シーンビューで確認するとナビゲーション用の水色のメッシュが生成されます。青い部分が移動可能な範囲ということになります。

経路探索動作確認

【Unity】NavMeshの始め方_5

このようにPlayerのGameobjectに NavMeshAgentコンポーネントをアタッチしておきます。
リファレンスをサラ読みする限り、この NavMeshAgentコンポーネントがプレーヤーの挙動を調整するもののようです。

そして下記のNavMeshPlayerコンポーネントもアタッチしgoal変数にゴールのGameObjectを割り当てて再生します。

NavMeshPlayer.cs · GitHub

【Unity】NavMeshの始め方_6

するとこのように、障害物を迂回してプレーヤーがゴールに辿り着くようになりました。

今回は最小構成のNavMeshを実装してみました。

結構細かく設定ができそうな感じなので次回はその辺を深掘って行ければと思います

オススメ記事
検証環境