Aleksandr Serdiuk - Ultimate Path Finder

Ultimate Path Finder

Category: AI / Navigation / Pathfinding  

Engine: Unreal Engine 5.x (tested on 5.6)  

Author: Aleksandr Serdiuk, PAEB (2022–2025)  

Overview

Ultimate Path Finder is a grid-based navigation plugin for Unreal Engine 5.  

It allows developers to generate custom navigation grids, perform fast A* pathfinding, and connect grids across large levels using portal actors. Unlike Unreal’s NavMesh, it is fully deterministic, layered with Gameplay Tags, and designed for runtime modifications.


Key Features

- Grid generation  

  Build 2.5D height grids with customizable cell size and bounds.

- Deterministic pathfinding  

  Optimized A* solver with diagonal-cost shaping for smooth paths.

- Multi-grid support  

  Use portals (`APathFinderPortalActor`) to connect separate grid volumes.

- Gameplay Tag layers  

  Separate navigation logic for different unit types or game modes.

- Runtime editing  

  Block/unblock cells, regenerate grids, and request paths at runtime.

- Utility queries  

  Find nearest valid point, random clear point, or all reachable points within a distance.

- Debug tools  

  Console commands, grid mesh visualization, verbose logging, and `stat` profiling.


Example Use Cases

- Tactical or strategy games with grid‑based movement.  

- Procedurally generated worlds where grids must be rebuilt at runtime.  

- Multi‑floor environments connected via portals.  

- Games needing deterministic pathfinding without relying on Unreal NavMesh.  


Technical Notes

- Written entirely in C++, exposed to Blueprints.  

- Uses World Subsystem (`UPathFinderSubsystem`) for centralized pathfinding.  

- Non-axis-aligned grids supported (actor rotation respected).  

- Minimal dependencies: Core, Engine, GameplayTags, DeveloperSettings.  

Links

- Documentation: See included User Manual and Developer Manual  

- Support: hello@paeb.online

Ultimate Path Finder - Changelog v2.0 (2025-11-03)

Added

- Async grid baking

- `bUseAsyncTrace` (default true) and `AsyncBatchSize` for batched async sweeps

- Auto-finalise baking even if platform returns no async handles (after issuing all traces)

- Layer-scoped rebuild of automatic portals after all grids in the layer complete

- Async Blueprint pathfinding node

- `UFindPathAsyncTask::FindPathAsync(WorldContext, Start, End, MaxStepHeight, Quality, LayerTag)`

- Returns `Completed(Path, GridUpVector)` on the Game Thread

- Manual portal persistence

- `FPathFinderPortal::bIsManual` prevents removal during automatic layer rebuilds

- Manual portals are retried when grids become available

- Tag-based blocking improvements

- `BlockingTag` (string) replaced with `BlockingTags` (TArray)

- Centralised helper `HasAnyBlockingTag(const AActor*)`

- `bTagBlocksRegardlessOfCollision` overlap fallback to enforce tag blockers independent of sweep channel

- Baked data UX

- `GridData` remains serialized but is hidden in Details to avoid heavy UI on large grids

- `ClearBakedGridData()` editor action clears baked cells and debug instances

Changed

- `RegenerateGridsOnLayer(LayerTag)`

- Only regenerates non-generated grids

- If all grids on the layer are already generated, rebuilds automatic portals immediately

- `BuildGlobalPath` internals

- Uses `ComputePath` per segment; avoids dynamic delegates on worker threads

- `ProcessPendingRegistrations()`

- Registers newly arrived grids/portal actors and triggers regeneration

- Defers manual portal creation until grids are generated; retries later automatically

Fixed

- Manual portals being lost during rebuilds (now preserved via `bIsManual`)

- Tag cache issues when modifying tags in editor (now always reads current `BlockingTags`)

- Potential async bake stalls when no async handles are produced (auto-finalization)

Deprecated/Removed

- Single `BlockingTag` string (use `BlockingTags`)

- Rebuilding portals immediately during grid baking (moved to layer-scoped rebuild when complete)

Notes for Upgraders

- Update blueprints/instances to fill `BlockingTags` (add `BlockPathFinder` by default)

- If you previously relied on portal rebuild timing, note that rebuild is now layer-scoped and occurs after all grids on the layer finish baking

- For performance-critical maps, consider enabling manual portals for key transitions to reduce O(N^2) automatic pairing cost