Nav Link Proxy and navigation modifier boundaries¶
At a glance
Type: AI/navigation concept - Main tools: Nav Link Proxy, Navigation Modifier Volume, navigation area classes, agent settings - Use when: the NavMesh shape or traversal cost is wrong, not when the Move To node syntax is wrong - Official docs: Navigation Links, Basic Navigation, and Modifying the Navigation Mesh
The one-minute version¶
- A Nav Link Proxy connects two navigable areas that do not touch, such as a jump, drop, gap, or shortcut through a door.
- A Navigation Modifier Volume changes the navigation area/cost for space inside the volume.
- Agent settings decide what kind of pawn the NavMesh is built for: radius, height, step height, slope, and related movement assumptions.
- These tools fix the navigation data. They do not make an AI smarter by themselves, and they do not replace Behavior Tree logic.
- If Move To fails at stairs, ledges, doors, or narrow gaps, inspect the NavMesh before adding another branch to the Behavior Tree.
- The Gameplay Debugger and nav visualization are the evidence. If the green mesh does not connect, Move To cannot invent a path.
What they actually do¶
Navigation data is a graph of walkable polygons and special connections:
flowchart LR
A[Nav area A] -- normal connected polygons --> B[Nav area B]
B -. Nav Link Proxy .-> C[Separate ledge / platform]
M[Modifier Volume] --> B
The pathfinder searches that data. A Nav Link Proxy adds an allowed edge between two places that are not connected by normal walking. A modifier volume marks space with a different navigation area, often changing cost or blocking travel for a filter.
pseudocode of pathfinding idea - not engine source
for each possible path from start to goal:
walk across connected nav polygons
optionally traverse nav links that this agent/filter allows
add polygon/link costs
choose the valid path with acceptable cost
If the navigation data has no connection, the AI may be correct to fail.
When the problem is a nav link¶
Use a Nav Link Proxy when the pawn should be able to traverse a discontinuity that the generated NavMesh cannot represent as normal walking:
- jump down from a platform,
- jump across a small gap,
- drop through a one-way ledge,
- climb or vault at a authored spot,
- pass through a door gap that needs a special traversal step,
- bridge two nav islands that should be connected.
Direction matters. A one-way drop should not become a two-way jump unless your game supports the return path.
When the problem is a modifier¶
Use a navigation modifier when an area should still exist in the nav data but should be treated differently:
- expensive mud or shallow water,
- blocked shortcut during a door state,
- danger zone the AI should avoid unless desperate,
- restricted area for one agent type,
- temporary obstacle or runtime rebuild area.
For beginner projects, start with one or two clear area classes. Do not create a large cost taxonomy before you can read the debugger.
When the problem is agent settings¶
If the green NavMesh does not fit your pawn, check the agent settings before adding links:
- capsule radius too wide for corridors,
- agent height too tall for low spaces,
- step height too low for small ledges,
- slope limit rejects ramps,
- multiple enemy sizes using one nav setup incorrectly.
A tiny spider and a tall humanoid may need different assumptions. A Move To task cannot fix nav data generated for the wrong body.
The pattern everyone actually uses¶
Debug first:
AI Move To fails near gap/door/stairs
-> press P / use Gameplay Debugger nav view
-> select enemy and inspect path
-> decide:
no connection across gap: add Nav Link Proxy
area should be costly/blocked: add Navigation Modifier Volume / area
pawn does not fit nav: adjust agent settings
nav is fine: debug Behavior Tree / Move To request
For a jump/drop:
Place Nav Link Proxy
-> move left/right link points to each nav island
-> set direction Both Ways or one-way
-> test with the actual enemy pawn
-> add animation/custom movement only if traversal needs visible action
Lookalikes - which one do I want?¶
| Tool | Changes | Use when |
|---|---|---|
| NavMeshBoundsVolume | Area where nav data is generated | AI has no green navigable space at all. |
| Nav Link Proxy | Special connection between nav areas | AI should cross a jump, drop, gap, or special traversal point. |
| Navigation Modifier Volume | Area type/cost/blocking inside a volume | AI should avoid, prefer, or be blocked by a region. |
| Navigation Area class | Cost/flags for nav polygons/links | Several filters/agents should treat an area consistently. |
| Navigation Query Filter | Per-query allowed/cost behavior | One AI/query should treat areas differently. |
| Agent settings | What body size/movement the nav data supports | NavMesh does not fit the pawn's capsule/movement. |
| Behavior Tree Move To | Requests movement to a target | Navigation data is correct and behavior should choose a destination. |
| EQS | Chooses a good location using tests/scores | The AI needs to select points intelligently, not fix topology. |
Rule of thumb: Links connect islands, modifiers change cost/permission, agent settings define who can fit, and Move To only uses the result.
Going deeper¶
- AI Move To & the NavMesh - movement request setup and failure pins.
- Get Random Reachable Point in Radius
- random patrol points on reachable nav data.
- Gameplay Debugger and AI Debugger for Blueprint Beginners
- inspecting selected AI and NavMesh.
- Visual Logger, EQS Debugger, and ShowDebug Boundaries
- choosing deeper nav/AI evidence.
- Behavior Tree Move To Task, Decorators, Services, and Observer Aborts
- when the behavior layer is the actual issue.
- Official docs: Navigation Link Proxy, Basic Navigation, and Modifying the Navigation Mesh.
- Engine source (requires engine access - we do not reproduce it here):
ANavLinkProxyunderEngine/Source/Runtime/AIModule/Private/Navigation/NavLinkProxy.cpp; navigation areas/modifiers underEngine/Source/Runtime/NavigationSystem/Private/NavModifier*.cppandEngine/Source/Runtime/NavigationSystem/Public/NavAreas/; Recast navmesh behavior underEngine/Source/Runtime/NavigationSystem/Private/NavMesh/.