8.

UE5 Nav Mesh Bounds Volume 完全ガイド

編集
この記事の要点
  • Nav Mesh Bounds Volume は AI が移動可能なエリアを定義するボリューム
  • 配置: Place Actors → Volumes → Nav Mesh Bounds Volume をシーンにドラッグ
  • 生成: 配置後 P キーで Navigation 可視化、Build > Build Paths で再生成
  • 裏で生成されるのは Recast Nav Mesh(自動生成、Brush Settings でサイズ調整)
  • 動的生成は Project Settings → Navigation Mesh → Runtime Generation = Dynamic

Nav Mesh とは

Nav Mesh (ナビゲーションメッシュ) は、AI キャラクターがどこを歩けるかを示す地形データです。UE5 では Recast アルゴリズムが使われており、レベル形状から自動生成されます。AI MoveTo、AI Navigation、Behavior Tree の MoveTo タスク等は、すべてこの NavMesh の存在を前提に動作します。

Nav Mesh Bounds Volume の役割

NavMesh はNav Mesh Bounds Volume の内側だけに生成されます。レベル全体に NavMesh を貼るには、レベルを覆う巨大なボリュームを置く必要があります。

手順1: ボリューム配置

  1. UE5 エディタ上部の Window → Place Actors(または左パネル)を開く
  2. カテゴリから Volumes を選択
  3. Nav Mesh Bounds Volume を Viewport にドラッグ&ドロップ
  4. Details パネルで Brush SettingsX / Y / Z サイズを調整
  5. レベル全体を覆うように位置・サイズを修正

手順2: 生成確認

ボリュームを置くと自動的に RecastNavMesh アクタもシーンに生成されます (Outliner で確認可能)。

操作結果
P キー (Viewport で押す)NavMesh 可視化 ON/OFF(緑色で表示)
Build → Build PathsNavMesh を再生成
Build → Build All Levels全レベル再ビルド
Show → NavigationViewport 表示メニューから切替

RecastNavMesh の主要パラメータ

Outliner で RecastNavMesh-Default を選択して Details パネルで調整します:

パラメータ説明典型値
Agent Radius歩く AI の半径34
Agent HeightAI の高さ144
Agent Max Slope登れる傾斜角44°
Agent Max Step Height登れる段差35
Cell Sizeセルサイズ (小さいほど精密、重い)19
Cell Heightセル高さ10
Tile Size UUタイル分割サイズ1000
Runtime GenerationStatic / Dynamic / Dynamic Modifiers Only用途次第

静的 vs 動的 NavMesh

モード用途負荷
Staticレベル形状が変わらないゲーム(FPS の固定マップ)軽い
Dynamic破壊・建築・移動床がある(Fortnite, Minecraft 系)重い
Dynamic Modifiers OnlyNavModifier の領域だけ動的に変える

Project Settings → Navigation Mesh → Runtime Generation で切替。

複数ボリュームで広域カバー

1 つの巨大ボリュームを置くより、必要なエリアごとに複数の中型ボリュームを置く方が:

  • NavMesh の生成範囲を絞れる → メモリ節約
  • 不要な空中・地下まで生成されない
  • Open World ではWorld Partition の Cell 単位で配置可能

NavMesh が生成されないケース

症状原因対処
ボリュームを置いても緑色が出ない下に地面がない / Collision なしStatic Mesh の Collision Complexity 確認
傾斜が緑にならないAgent Max Slope より急角度を上げる or 緩斜面に
段差で AI が止まるStep Height より高いAgent Max Step Height を増やす
狭い通路で生成されないAgent Radius が大きすぎRadius を下げる or 通路を広げる
動的物体で更新されないRuntime Generation = StaticDynamic に変更
Project Settings の Navigation System Class が空システム自体無効Default Navigation System Class に NavigationSystemV1 を設定

Project Settings での Navigation 設定

Edit → Project Settings → Navigation System
  - Default Navigation System Class: NavigationSystemV1
  - Auto Create Navigation Data: true
  - Generate Navigation Only Around Navigation Invokers: false
    (true にすると AI 周辺のみ生成 = Open World 向け)

Edit → Project Settings → Navigation Mesh
  - Runtime Generation: Static / Dynamic
  - Agent Radius / Height / Max Slope / Step Height
  - Cell Size / Cell Height
  - Tile Pool Size

NavModifier Volume との組み合わせ

「ここは AI が通れない」「コストが高い」を表現するのが Nav Modifier Volume:

Place Actors → Volumes → Nav Modifier Volume を配置

Details → Area Class:
  - NavArea_Default      : 通れる
  - NavArea_Null         : 通れない (穴扱い)
  - NavArea_Obstacle     : 障害物
  - NavArea_LowHeight    : 低い天井
  - 自作 NavArea クラス  : カスタムコスト

AI MoveTo の使い方

// AI Controller から
void AMyAIController::MoveToTarget(AActor* Target)
{
    UAIBlueprintHelperLibrary::SimpleMoveToActor(this, Target);
}

// または
void AMyAIController::MoveToLocation(FVector Location)
{
    MoveToLocation(Location, 5.0f, true, true, false, true);
}

// Behavior Tree から MoveTo タスクで利用
// → 内部で NavMesh の経路探索 (A*) が走る

Open World での Navigation Invoker

巨大なオープンワールドでは全領域に NavMesh を貼るとメモリが破綻します。Navigation Invoker コンポーネントを AI に持たせると、AI 周辺のみ動的生成されます:

1. Project Settings → Navigation System
   → Generate Navigation Only Around Navigation Invokers: true

2. AI Character の Components に
   → Navigation Invoker Component を追加

3. Tile Generation Radius / Removal Radius を設定
   (近くで生成、遠ざかれば破棄)

パフォーマンス指針

  • Cell Size が小さいほど精度↑・生成時間↑・メモリ↑
  • 大半のゲームでは Cell Size = 19(デフォ)で十分
  • Dynamic モードは Static の数倍重い。本当に必要なときだけ
  • Open World は Navigation Invoker 必須
  • 不要な空中・地下にボリュームを広げない

FAQ

Q: ボリュームを置いたのに AI が動かない
A: ① P キーで NavMesh 可視化、② AI Character の Movement Component が CharacterMovement か、③ AI Controller の AutoPossess、④ Behavior Tree / Blackboard が正しいか。

Q: ランタイムでボリュームを動かしたい
A: Runtime Generation を Dynamic に。Volume を Movable にして SetActorLocation。タイル単位で再生成されます。

Q: NavMesh の上を歩くより階段を使ってほしい
A: Nav Modifier Volume + 自作 NavArea でコストを上げる。または NavLink Proxy で経路を明示。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Event BeginPlay
  2. Event ActorBeginOverlap
  3. Event Tick
  4. on component begin overlap
  5. On Component Hit
  6. CameraBoom(Spring Arm)
  7. Get Player Character
  8. Nav Mesh Bounds Volume
  9. AI MoveTo
  10. Pawn
  11. Create Render Target 2D
  12. Take High Res Screenshotノード
  13. Sphere Reflection Capture
  14. Event Tickノード
  15. ウィジェットのキャンバスパネル
  16. DefaultSceneRoot
  17. FloatingPawnMovement
  18. Set World Rotation
  19. Event Any Damage
  20. Set World Rotation
  21. VInterp To
  22. Get Socket Transform

最近更新/作成されたページ