NavMesh Bounds Volumes¶
ANavMeshBoundsVolume defines where the navigation mesh is built. Without one, no navmesh exists and AI pawns can't path.
Setup¶
- Place a
NavMeshBoundsVolumecovering the playable area. - Project Settings → Navigation Mesh — pick the agent radius / cell size.
- The editor rebuilds the navmesh automatically on changes.
- View it with
Pin the viewport (togglesShow → Navigation).
Building strategies¶
| Strategy | When |
|---|---|
| Static | Pre-built at level save, lowest runtime cost |
| Dynamic (auto-modifying) | Rebuilds at runtime when actors with bNavigationRelevant move |
| Tile-based with rebuild | Rebuilds dirty tiles only — best for huge worlds |
Project Settings → Navigation Mesh → Runtime Generation:
StaticDynamicDynamicModifiersOnly— re-runs only the modifier pass, not the geometry rasterization (fastest)
Multiple agents¶
Configure agents (e.g. small humanoid, large vehicle) in Project Settings → Navigation System → Supported Agents. Each agent gets its own navmesh layer.
Modifiers¶
UNavModifierComponent or NavModifierVolume can:
- Cost-modify regions ("avoid going through fire")
- Mark areas as impassable for specific agents
- Define jumpable links via
NavLinkProxy
Linked nav for long jumps / ledges¶
NavLinkProxy actors define point-to-point connections that the navmesh treats as edges. Used for ladders, drop-offs, teleporters.
Performance¶
- Larger cell sizes = faster build, blockier paths.
- Limit your NavMeshBoundsVolume to the actual playable area; don't include the skybox.
- Dynamic rebuild on cell change can spike the main thread — profile with
stat NavSystem.
Gotchas¶
- A NavMesh Bounds Volume that's too thin in Z misses geometry. Cover at least 2 m vertically beyond your tallest walkable surface.
- For World Partition maps, navmesh streams per cell — make sure each WP cell has bounds coverage.
- AI uses the first matching Supported Agent — order matters in the project settings list.