内容
NavMeshSurfaceを使い、NavMeshを動的Bakeする方法についてまとめます。
- 内容
- 開発環境
- パッケージのインストール
- NavMeshSurfaceの作成
- NavMeshSurfaceのパラメータ
- NavMeshのBake
- まとめ
- おまけ AI Navigation Displayの表示切替
- 参考資料
開発環境
Unity 2022.3.9f1
AI Navigation ver1.1.4
パッケージのインストール
Unity Package ManagerからAI Navigationをインストール
Unity 2021の場合
Package Managerの左上にある+ボタンから、
「com.unity.ai.navigation」を入力し、Addするとインストールされます。
NavMeshSurfaceの作成
SceneにNavMesh Surfaceを作成します。
Sceneビュー右クリックのメニューにAIの項目が増えているのでNavMesh Surfaceを選択
シーン内にNavMeshSurface(がアタッチされたオブジェクト)が作成されました。
NavMeshSurfaceのパラメータ
各パラメータを見ていきます
(Unityのバージョンによって微妙に違いがあります)
Agent Type
影響を受けるNavMeshAgentの対象。
Humanoidなら、HumanoidのAgentだけがこのエリアを影響を受ける。
Default Type
生成するエリアのタイプ。
歩行可能なエリアだけ作成する、歩行できないエリアだけ作成するといった使い方ができる。
Generate Links
NavMeshLinkの作成の有無。
複数のNavMeshSurfaceを接続する時に使う。
Use Geometry
使用するジオメトリの設定。
Render Meshesなら、レンダリングされるメッシュ(Terrainを含む)に合わせてベイク。
Physics Collidersなら、Collider(IsTriggerでないもの)に合わせてベイク。
Object Collection
ベイク対象のGameObjectを選別する設定
- All Game Objects:Scene内の全てのオブジェクトが対象
- Volume:Scene内の指定範囲内のオブジェクトが対象
- CurrentObjectHierarchy:NavMeshSurfaceの子オブジェクトが対象
- NavMeshModifierコンポーネントがアタッチされたオブジェクトのみが対象
Include Layers
ベイク対象のレイヤー
NavMeshのBake
InspectorのBakeボタンを押すとBakeされNavMeshが生成されます。
Scriptからは以下のようにBakeできます
using UnityEngine; using Unity.AI.Navigation; public class Builder : MonoBehaviour { [SerializeField] private NavMeshSurface surface; public void Build() { surface.BuildNavMesh(); } }
当然ゲーム実行中にBakeできます。
まとめ
NavMeshSurfaceを使ってNavMeshを動的にBakeしました。
ランダム生成ダンジョンなど、リアルタイムにNavMeshを更新したい時に役立ちますね。
昔はGitHubからパッケージを落としてこないと使えない機能でしたが、今ならUnityPackageManagerで導入できるので大分使いやすくなりました。
以上です。
おまけ AI Navigation Displayの表示切替
AI NavigationをインストールするとSceneビューにこのようなDisplayが表示されます。
これは右クリックからHideを選ぶと非表示になります。
もう一度表示したい時は、Sceneビューの右上端にある3点マークを押してOverlay Menuを選択し、
Overlays Menuが出るので、AI Navigationの目をクリックすると表示されます
参考資料