【Unity】NavMeshの作成手順(Unity2022:新バージョン)

2024年10月1日

NavMesh(ナビゲーションメッシュ)は、3Dゲームでキャラクターが自動的に移動できるエリアを定義する技術です。ゲーム開発では、キャラクターが障害物を避けて目標地点に到達するような経路探索が必要です。NavMeshを使うと、ゲームの地形をもとに移動可能な範囲(メッシュ)を自動的に生成し、キャラクターが効率的に移動できます。Unityでは、NavMeshコンポーネントを追加して、簡単に経路探索を設定できるため、初心者でも使いやすい機能です。

新しいバージョンになり、一部、操作が異なります
次を参考に進めていきましょう

パッケージマネージャからAI Navigationのインポート

Windowメニューからビューを開いてインポートします

障害物の作成

テスト用に高さ1くらいのCubeを作成して、プレイヤーと敵の間に置いておきましょう

追いかける敵を作成します

想定として敵に見立てたシリンダーを1つ置いてみましょう

敵のゲームオブジェクトに追いかける機能のコンポーネントを追加します

NavMeshAgentコンポーネントを追加します

追いかけるスクリプトの作成

NavMeshAgentを利用するために、移動用にスクリプトを1つ作成し、敵(シリンダー)にアタッチします


NavmeshAgentのdestination(目的地)プロパティにプレイヤーを代入することで追いかける機能が実行されます

using UnityEngine;
using UnityEngine.AI;

[RequireComponent(typeof(NavMeshAgent))]
public class Enemy : MonoBehaviour
{
    [SerializeField]
    Transform playerTransform;

    NavMeshAgent agent;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        agent.destination = playerTransform.position;
    }
}

アタッチしたら、インスペクターのplayerTransformフィールドに、追いかけられるプレイヤーをドラッグ&ドロップします

Updateに記述しているので、毎フレームごとにプレイヤーが移動すると、そこに向かって追いかけてくることになります

敵の移動可能エリアの指定

シーンにNavMesh Surfaceゲームオブジェクトを作成と移動エリアを作成

ヒエラルキーで右クリック、AIメニューから選択します
NavMeshSurfaceコンポーネントがアタッチされたNavMesh Surfaceゲームオブジェクトが作成されます
(ゲームオブジェクト名とコンポーネント名が同じですが、機能が違うので大丈夫です)

敵の移動エリアの作成

作成後、NavMeshSurfaceコンポーネントで、移動可能エリアのベイクを実行します

上記手順を進めた時の動画

実行結果

敵が追っかけてくるパラメータ(情報)のカスタム設定

スピードがデフォルトで3.5m/sになっていますので、ゆっくり迫ってきて欲しい時は調整しましょう

NavMesh Surfaceの情報を変更するには

エージェントの移動制限のパラメータは、インスペクターから変更できません

Windowメニューから設定変更のページを開きます

AI,Unity

Posted by hidepon