自動生成されたマップで動くAIキャラクターの作成①
Runtime時のNavMeshのアップデート
AIで動くキャラクターは、マップ形状に応じて動く必要があります。UnityではNavMeshを使用してキャラクターの動く経路を計算するのが一般的ですが、マップがランタイム時の自動生成の場合、NavMeshもランタイム時に更新してやる必要があります。Unityの2022から正式に導入されたUnity.AI.Navigationを使用するとランタイム時のNavMesh更新が可能になっていました。
環境
現状最新のAI Navigation 1.1.1 からRuntime時のNavMesh更新が正式にサポートされたようです。 Unity公式ドキュメントはこちらになります。 docs.unity3d.com
- Unity 2022.2.2f
- Unity.AI.Navigation 1.1.1
Unity2022で起動後、PackageManagerからUnity.AI.Navigationをインストールします。
テストコード
テストとして、広めのプレーンの上に3つのブロックをおいて動作を見ていきます。 NavMeshManagerはEmptyオブジェクトで、ここにNavMeshSurfaceのコンポーネントを割り当てます。
このオブジェクトの子供のオブジェクトのみ、NavMeshの対象にしたかったため、Collect ObjectsをCurrent Object Hierarchyに設定しました。
Start時にNavMeshを生成する簡単なコードを用意しました。
using System.Collections; using System.Collections.Generic; using UnityEngine; using Unity.AI.Navigation; public class NavMeshManager : MonoBehaviour { // Start is called before the first frame update void Start() { NavMeshSurface surface = null; TryGetComponent(out surface); if (surface) { surface.BuildNavMesh(); } } }
スタートして実行してみます。 青色のメッシュがNavMeshになります。 非常に簡単な仕組みで、NavMeshをランタイム時に生成することができました。 次回以降、これを発展させていきます。