DoN AI Navigation – A free plugin for Unreal Engine 4

3D Pathfinding / Flying AI solution

DoN the Nature game uses a custom 3D pathfinding solution that I built for DoN’s flying creatures to navigate a dynamic, procedural world. This solution is now available for free to all Unreal Engine users!

I’m releasing the plugin along with full source code (MIT License) and also a complete sample project as my gift to the Unreal community.


Unreal Marketplace




For Unreal 4.16 and future versions please visit the Unreal Marketplace (still a free plugin!). For older versions use the links below:


Unreal Engine 4.15:

UE4 Plugin:

Sample Project: DonNavigationSamples


Unreal Engine 4.13:

UE4 Plugin:

Sample Project: DonNavigationSamples


Unreal Engine 4.12:

UE4 Plugin:

Sample Project:

Unreal Engine 4.11:

UE4 Plugin:

Sample Project:


GitHub Repo:


Overview and Tutorial: 


Change Log

21st February 2017

v1.5, UE 4.15 support released!


16th September 2016

v1.4, UE 4.13 support released.

* 4.13 support, Linux and Mac compatibility issues fixed. All downloads are still for provided for Windows only, you need to build the plugin yourself for other platforms.

* Ignore all collision bodies belonging to the navigating pawn for pathfinding.

* Fix for infinite loop/hanging in certain hard-to-reproduce scenarios

* New manager setting: “Auto Correction Guess List”. This variable is used to offset bots from their origin for pathfinding purposes whenever they’re “stuck” on a wall, floor, etc or if an actor being chased (eg: player) is hiding flush with a wall. Tweak this to an appropriate value based on the size and scale of both your map and the obstacles in it.

* Long distance query fix (ref forum posts #136, #137)


18th June 2016

v1.3, 4.12 support was released.

30th May 2016

v1.3 (4.11 only)Git commit.

* Unbound worlds are now supported as an experimental feature! This means if you use the new manager class you are no longer restricted to navigation queries within the navigable volume. Simply use the new navigation manager DonNavigationManagerUnbound in your map instead of the previous one (the bounds will still show but are not used anywhere if you use the unbound manager) Thus your map size is no longer constrained by the plugin so your players can navigate around practically any corner of the map no matter how far-flung it may be. However this does not solve long-distance navigation performance meaning your navigation queries will still need to be towards a reasonably close target. Finally, the unbound manager obviously costs performance too so you’ll need to consider that as well in deciding whether the unbound Manager is a good fit for your usecases.

* 4.11 is finally supported properly with this release.

* Stability fixes in the FlyTo behavior tree task.

* A number of code changes were been made to support unbound navigation and many of these are quite rough at this point. There is a fair amount of code duplication arising as a result of this.


v1.2 (4.10 only)Git commit.

Changes include, but are not limited to:

* Major bugfix: Hash comparison in dynamic task scheduler is fixed to account for unrelated meshes using a common cache key. Unrelated tasks were previously getting mixed up because of this bug!
With this fix, the moving glass panels example in the sample project should now be “near perfect”. The rocket dodging example is still rough around the edges (so there’s still further scope for improving dynamic collision handling)

* Major usability feature: Automatically teleport pawn to a nearby “good” location for cases where the pawn is starting pathfinding from a spot where initial collisions are indeterminate. Goal vector will also be automatically tweaked if it happens to be in a “bad spot”. This should help new users in getting their initial testing going with fewer hitches. You can disable this behavior under query params by setting “FlexibleOriginGoal” to false. Some of the older rules still apply – if your pathfinding goal or origin is very near the floor then your queries will either fail or time-out.

* 4.11 should be working fine now (I haven’t tested this myself, so please let me know if it still doesn’t work for you!)

* Improved logging: Prevent log spam by memorizing known “bad queries”, other general improvements to logging

* API signature change to “ScheduleDynamicCollisionUpdate” to allow users to disable caching altogether. This change is not backward compatible I’m afraid. C++ users should update existing calls to this function accordingly.

* Stability v/s Performance compromise in favor of stability: several VolumeAtUnsafe lookups have been replaced with VolumeAtSafe. Plugin users now need to worry less about triggering certain edge conditions which may lead to crashes, at the cost of a small amount of performance.

* Animation states for your pawn can be easily updated now using new callbacks: Locomotion Start/End/Next/Abort. Implement these as part of the IDonNavigator interface.

* Navigator interface now exported properly as part of DONAINAVIGATION_API

* You can now disable cache usage completely for dynamic collisions by passing DisableCacheUsage as true to the scheduler. This is important for some situations where you cannot reliably use the mesh component (or a cache identifier) as a unique key for your mesh and you’d rather not bother with caching at all.



v1.1 – Fixed a bug where the first path segment was being ignored. Also fixed path visualization to allow display of both optimized and unoptimized paths at the same time.