自動生成されたマップで動くAIキャラクターの作成②

自動生成ダンジョンで自動的に動くAIキャラクターの生成

自動生成ダンジョンにランタイム時におけるNavMesh生成プログラムを適用してみます。 自動生成ダンジョンプログラムは以前のものになります。

        public void Awake()
        {
            GameObject rootObject = new GameObject("Root");
            rootObject.transform.parent = transform;

            GenerateDungeon(rootObject, dungeonColumnSize, dungeonRowSize);

            // generate navmesh
            NavMeshSurface surface = null;
            TryGetComponent(out surface);
            if (surface)
            {
                surface.BuildNavMesh();
            }
        }

Awake時にNavMeshSurfaceコンポーネントで、NavMeshの自動生成を行っているだけの非常に簡単なコードになります。 結果がこちらです。簡単にNavMeshが生成できました。

== AIで動くキャラクターの作成 ダンジョンに開始位置、終了位置を設定し、開始位置から終了位置まで動いていく簡単なキャラクターを作成します。 Capsuleコンポーネントを作成し、そこにNavMeshAgentのコンポーネントと、制御用スクリプトを追加します。 制御用スクリプトは以下のような記述になります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class DummyAICharacter : MonoBehaviour
{
    public Vector3 Destination = Vector3.zero;
    private NavMeshAgent m_navMeshAgent = null;
    

    // Start is called before the first frame update
    void Start()
    {
        TryGetComponent(out m_navMeshAgent);
    }

    // Update is called once per frame
    void Update()
    {
        if (m_navMeshAgent)
        {
            m_navMeshAgent.destination = Destination;
        }
    }
}

GameManagerオブジェクトも作成し、以下のようなコードで、ダンジョンの開始位置をAICharacterに与えるようにしました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class DummyAICharacter : MonoBehaviour
{
    public Vector3 Destination = Vector3.zero;
    private NavMeshAgent m_navMeshAgent = null;
    

    // Start is called before the first frame update
    void Start()
    {
        TryGetComponent(out m_navMeshAgent);
    }

    // Update is called once per frame
    void Update()
    {
        if (m_navMeshAgent)
        {
            m_navMeshAgent.destination = Destination;
        }
    }
}

実行結果はこのようになります。 スタート地点(S)からゴール地点(G)までNavMeshAgentによりChacacterは迷うことなく迷路を進んでいくことができています。

今回のプロジェクトは以下からダウンロードできます。

https://gitlab.com/ringogames2022/kruskalalgorithmdungeon/-/tree/main

ringogames.hatenablog.com