reckfellENGINE

Navigation diagnostics

Find empty-path, connection, and physics mismatch causes.

On this page

First identify what failed: the surface, region connections, query result, or physical movement. A navigation overlay does not prove that the character collider fits along the route.

Diagnostic order

  1. Check that the region contains polygons, belongs to the intended map, and is enabled. A nonzero MapGetIterationId means an iteration has been published, not that every latest change has finished.
  2. Compare the query map and layer mask with the region. A link also needs matching layers and an allowed direction.
  3. Read the path and compare both endpoints with the requested start and goal. A nonempty path can be partial; finishing a route does not mean reaching the goal.
  4. If the path is correct, inspect parent movement: velocity, MoveAndSlide(), collider, and physics layers. An agent does not move the body itself.
  5. For timing spikes, separate geometry parsing, baking, map updates, path searches, and avoidance. Measurement and optimization.

Debug visualization

In a debug build, NavigationServer2D.SetDebugEnabled(true) and NavigationServer3D.SetDebugEnabled(true) enable server flags. GetDebugEnabled() reads them. This does not create display geometry.

The corresponding Entity types build standard region visualization. Server-only RIDs do not automatically appear on screen. For a custom server-based implementation, draw published-data outlines and the actual query result separately.

Project settings under debug/shapes/navigation control edge lines, surface colors, and connection display. Seeing through geometry helps reveal overlapping surfaces; it does not make a hidden connection traversable. Use visualization for development rather than game logic: the setter implementation is guarded by DEBUG_ENABLED.

Read the counters correctly

DataMeaning
GetProcessInfo(ProcessInfo.ActiveMaps)Active maps in that 2D or 3D server.
RegionCount, PolygonCountAggregate over active maps after server processing, not every RID ever created.
Performance.Monitor.NavigationPolygonCountSum of 2D and 3D. Use Navigation2DPolygonCount or Navigation3DPolygonCount for one dimension.
EdgeMergeCount, EdgeConnectionCount, EdgeFreeCountInformation about connection methods and remaining edges. Do not add these as three independent kinds of traversability.
Performance.Monitor.TimeNavigationProcessNavigation server processing time in seconds, not the duration of your individual path-search call.

A disabled region still belongs to its map and remains in RegionCount, although queries cannot traverse it. The counter is not a count of accessible gameplay areas. Deactivating a map removes its contribution from the aggregate; it does not free its RID.

Symptom → next check

SymptomCheck
Empty path immediately after creationWait for the intended geometry to publish; check the map, polygons, and nonzero mask.
Visible surfaces do not connectEdge connections: map grid, gap, and connection toggles.
A link does not provide passageLinks: direction, attachment radius, layers, and the 1.0.0 IncludedRegions limitation.
The agent finished far from the goalPartial path; compare the endpoint with the original goal and inspect IsTargetReached().
The character hits a wallCollision and navigation disagree. Physical 3D example.
Disabling a region did not reduce its counterThe region remains on an active map; disabling is not removal.

Counters, 2D/3D sums, and flag switching were executed on installed version 1.0.0. Visible overlays, editor interactions, and a release export were not evaluated by this check.

Reckfell Engine documentationBack to top ↑
QUICK LINKSGetting startedEntity hierarchyC# & .NET 10Scenes and prefabs
Reckfell guides and full API K
reckfellENGINE
RECKFELL ACCOUNT

Sign in

Sign in to your Reckfell account.

One account for the entire Reckfell platform.