自動生成されたマップで動く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をランタイム時に生成することができました。 次回以降、これを発展させていきます。

ringogames.hatenablog.com