【Unity】NavMeshの作成手順(Unity2022以降:新バージョン)
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 を追加して経路をつなげる。
こうすることで、「人間は通れないけどドローンは通れる」 とか
「大型モンスターは広場しか来ない」 といったゲーム的な演出が自然に作れます。
ディスカッション
コメント一覧
まだ、コメントがありません