[Unity6] NavMeshでAgentを壁などの垂直面にも移動できるようにする方法。

(2025/02/19)
[Unity6] NavMeshでAgentを壁などの垂直面にも移動できるようにする方法。

開発環境
  • Unityのバージョン : 6000.0.36f1
  • 実行例

    下のこの記事を読めば、GIFのようにAgentが壁を移動する機能を実装することができます。

    [Unity6] NavMeshでAgentを壁などの垂直面にも移動できるようにする方法。

    1. 床と壁を追加

    まず、下の画像のように床と壁となるオブジェクトを設置し、それぞれにNavMesh Surfaceを追加し、Bakeします。
    この時、壁となるオブジェクトはX軸またはZ軸を90°回転させて設置してからBakeしてください。

    [Unity6] NavMeshでAgentを壁などの垂直面にも移動できるようにする方法。
    2. NavMesh Linkを追加

    空のオブジェクトを追加し、そのオブジェクトにNavMesh Linkをアタッチします。
    次に、PositionsのStart Point・End Pointの値とWidthの値をそれぞれ床と壁に合うように調整します。
    ※NavMesh Linkについては、このページで解説しています。

    [Unity6] NavMeshでAgentを壁などの垂直面にも移動できるようにする方法。
    3. Agentと目標オブジェクトの追加

    画像のように、床と壁の適当な位置にAgent(赤色のオブジェクト)と目的地となるオブジェクト(青色のオブジェクト)を設置します。

    [Unity6] NavMeshでAgentを壁などの垂直面にも移動できるようにする方法。

    Agentに、Nav Mesh Agentコンポーネントを追加しその後、下のコードのスクリプトをアタッチします。

    using UnityEngine;
    using UnityEngine.AI;
    
    public class EnemyAgent : MonoBehaviour
    {
        private NavMeshAgent agent;
        public GameObject target;
    
        void Start()
        {
            agent = GetComponent<NavMeshAgent>();
        }
    
        void Update()
        {
            agent.destination = target.transform.position;
        }
    } 
    

    InspectorのTargetに目的地となるオブジェクトを設定します。

    シーンを実行すると、Agentが垂直な壁に対しても動けるようになっています。

    Nav Mesh Agentコンポーネントについては以下の記事で解説しています。

    NavMashAgentの全プロパティ解説。