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

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

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

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

まずはリファレンスを見ながらやってみます。
ナビメッシュの作成 - 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を実装してみました。

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

オススメ記事
検証環境