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

2025年10月6日

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

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

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

Unity6ではデフォルトでインポートされています

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になっていますので、ゆっくり迫ってきて欲しい時は調整しましょう

 NavMeshAgent コンポーネント は、Unity でキャラクターをナビゲーションメッシュ(NavMesh)上で自動移動させるためのコンポーネントです。主に 「どうやって NavMesh 上を動くか」 のパラメータを設定します。以下に主要項目を解説します。


NavMeshAgent コンポーネントの項目解説

Agent Type

  • どのエージェントタイプ(Humanoid / Monster / Drone など)で経路探索を行うか。
  • NavMeshSurface 側でベイクされた NavMesh と一致していないと、移動経路を見つけられません。

Base Offset

  • NavMesh 上のエージェントの 高さのオフセット
  • キャラクターの見た目と NavMesh の位置にズレがあるときに調整します。例:足が浮く/地面にめり込む場合に数値を修正。

Speed

  • 移動速度(m/s)。
  • 実際のキャラクターの走る速さ・歩く速さをここで指定します。

Angular Speed

  • 回転速度(°/秒)。
  • 方向転換の速さ。値が小さいと「大回りして旋回」し、大きいと「急に方向転換」するようになります。

Acceleration

  • 移動開始や方向転換の際の 加速の速さ
  • 値を小さくすると「徐々に動き出す」、大きいと「瞬時に最高速に到達」。

Stopping Distance

  • 目的地に到着したと判定する距離。
  • 例:1.0 にすると、目的地の手前 1m で停止します。
  • 攻撃モーションや会話イベントで「少し離れて止まる」ような使い方に便利。

Auto Braking

  • true にすると目的地に近づいた時に徐々に減速して止まる。
  • false にすると減速せず通り過ぎ、連続的に巡回移動を行うのに向いています。

Radius

  • エージェントの半径。
  • 通れる通路の幅の判定に使われます。
  • 大きいと狭い通路に入れなくなる。

Height

  • エージェントの高さ。
  • 天井の低い通路を通れるかどうかの判定に影響。

Obstacle Avoidance

  • 他のエージェントや障害物を避けるアルゴリズム。
  • Quality(Low, Medium, High, Good)を設定可能。
  • Priority(数値が低いほど優先度高)で「誰が避けるか」を制御。

Auto Repath

  • 経路が塞がれた場合に、自動的に新しい経路を探すかどうか。

NavMesh Walkable Areas

  • どの Area を通行可能にするか(Walkable / Jump / Water など)。
  • AreaMask で複数選択できます。
  • 特定のエリアを避けたいときに利用。

補足:実行時に使う代表的な API

  • agent.SetDestination(Vector3 target)→ 指定した位置に移動開始
  • agent.remainingDistance→ ゴールまでの距離
  • agent.isStopped = true→ 移動を強制停止
  • agent.Warp(Vector3 pos)→ 瞬間移動(NavMesh 上の位置に強制ワープ)

まとめると、NavMeshAgent は NavMeshSurface 上を「どう移動するか」を制御する設定で、移動速度や回転、目的地到達判定、障害物回避までを司ります。

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

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

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

参考

NavMesh Surface コンポーネント

ピックアップしているのは、どのエリアを指定するかのポイントになります

以下に主要な項目を解説します。


NavMesh Surface の役割

  • NavMesh とは、キャラクター(エージェント)が「移動可能」なエリアを定義するデータです。
  • NavMesh Surface は、このナビゲーションメッシュを 指定範囲・条件でベイク(生成) するための設定をまとめたコンポーネントです。
  • 複数の Surface を作成することで、床・壁・特殊エリアごとに異なる NavMesh を分けて生成できます。

Inspector の各項目解説

Agent Type

  • どの エージェント定義(人間サイズ、モンスターサイズ、ドローンなど)に合わせて NavMesh を生成するか。
  • NavMeshAgent コンポーネントに設定されているエージェントタイプと一致させる必要があります。

Collect Objects

  • NavMesh の元となる ジオメトリ(メッシュ)をどこから収集するか を指定。
    • All Game Objects : シーン全体から対象を探す。
    • Volume : 指定した NavMeshSurface の Box Collider 範囲内だけ。
    • Current Object Hierarchy : 自分の階層以下にあるオブジェクトだけ。
    • NavMeshModifier Component Only : NavMeshModifier が付いたオブジェクトのみ。

Use Geometry

  • NavMesh の生成元とする 形状の種類
    • Render Meshes : 実際に表示されているレンダリング用メッシュ。
    • Physics Colliders : コライダーを対象にする。→ 通常は Physics Colliders を使うことが多いです。見た目の細かい凹凸でなく、移動の判定に必要な当たり判定を基準にできるからです。

Default Area

  • ベイク時に設定される 移動エリアの種類
    • Walkable(歩行可能)、Not Walkable(不可)、Jump や Water など独自エリアを定義可能。
    • 例えば「溶岩地帯は移動コストを上げる」といった調整ができます。

Generate Links

  • オフメッシュリンク(ジャンプ、ドア通過などの特殊移動経路)を自動生成するか。
  • ON にすると NavMesh 間の「飛び移り」や「つながり」を自動で作成します。

Advanced Settings(画面下にあるパラメータ)

  • Agent Radius (R) : キャラクターの半径。狭すぎる通路は NavMesh に含まれなくなる。
  • Agent Height (H) : キャラクターの身長。通れない低い天井は除外される。
  • Max Slope : 移動可能な最大傾斜角度(°)。これを超える坂は通れないと判定される。
  • Step Height : 越えられる段差の高さ。これを超える段差は NavMesh に含まれない。

まとめ

  • NavMesh Surface は「どの範囲」「どの基準」で NavMesh を作るかを管理するコンポーネント。
  • Agent Type を適切に選ぶことで、キャラクターのサイズや移動制約に合わせた道を生成できる。
  • Collect Objects や Use Geometry を調整して「どのオブジェクトを歩行可能エリアに含めるか」を制御できる。
  • 半径・高さ・傾斜・段差 の数値設定が、NavMesh の通行可能領域を決める重要なポイント。


Unity では、1つのシーンに 複数の NavMesh Surface を置くことができます。これにより、キャラクターごとの移動条件に合わせた経路探索 が可能になります。


例1:人型キャラクター(歩行者)

  • Agent Type : Humanoid(半径0.5m、高さ2m など)
  • Use Geometry : Physics Colliders(床・壁の当たり判定を基準にする)
  • Default Area : Walkable
  • Max Slope : 45°(普通の坂は登れる)
  • Step Height : 0.3m(段差を乗り越えられる高さ)

→ この設定でベイクすると、人間が普通に歩ける道だけ が NavMesh になります。

通路が狭すぎたり、天井が低い部分は除外されます。


例2:小型ドローン(空中移動)

  • Agent Type : Drone(半径0.2m、高さ0.5m に設定)
  • Use Geometry : Physics Colliders(空間の障害物を基準にする)
  • Default Area : Flyable(独自に定義)
  • Max Slope : 無視(傾斜は関係なし)
  • Step Height : 0

→ 空中移動用の NavMesh を生成可能。

例えば建物の中でも「人が通れない換気ダクト」や「天井の隙間」を通れるように設定できます。


例3:大型モンスター

  • Agent Type : Monster(半径1.0m、高さ3m など大きめに設定)
  • Default Area : MonsterWalk
  • Max Slope : 30°(傾斜には弱い)
  • Step Height : 0.5m

→ 巨大なキャラ用に NavMesh を作ると、通れる場所が人間より制限される

細い通路や低い天井のある部屋には入れなくなる。

これを利用して「モンスターは広い広場だけ出現する」といった演出が可能です。


例4:水中キャラクター

  • Agent Type : Fish
  • Default Area : Water
  • Collect Objects : Volume(池や川の領域を指定)
  • Max Slope / Step Height : 無関係

→ 水中限定の NavMesh を作り、泳ぐキャラクター専用 にできます。


運用のコツ

  • NavMeshSurface を複数設置し、それぞれに「Agent Type」を割り当てる。
  • ベイク結果は色分けされて表示されるので、デバッグしやすい。
  • NavMeshAgent コンポーネントの Agent Type を切り替えると、対応する NavMesh を自動で参照する。
  • 特殊な移動(ジャンプ・ワープ・ハシゴなど)は NavMesh Link を追加して経路をつなげる。

こうすることで、「人間は通れないけどドローンは通れる」 とか

「大型モンスターは広場しか来ない」 といったゲーム的な演出が自然に作れます。


訪問数 226 回, 今日の訪問数 1回

AI,Unity

Posted by hidepon