news | about | forums | links | mods | tools | tutorials | contact

NavigationPoint Network - author: [Pfhoenix] [mod exemplar]
The NavigationPoint Network NavigationPoint Networks refers to the method of path finding that Unreal / Unreal Tournament bots utilize. Though a class attempting to cover all aspects of navigation AI would far exceed the bounds of a simple tutorial, I will explain the basics of the NavigationPoint Network, as well as what Unreal / UT does with the bots.
Knowing the Path
The NavigationPoint Network uses a 'network' of 'nodes' (usually pathnodes) to find its' way around a level. The names are a resultant of the similarities in nature of the method - like a telephone or computer network, each node is a connection point, and connections between nodes are the available paths of travel on the network.
Using the Path
In order to use the network, there are several requirements : a Pawn subclass with proper variables set and a map with a network properly built. Let's break it down a bit further.
Pawn subclass. A Pawn subclass would be a Bot, Player (via PlayerPawn), or a ScriptedPawn (there are more, these are just examples). Pawns access the network via two native functions - FindPathTo() and FindPathToward(), the difference being FindPathTo() tries to find a path to a particular location while FindPathToward() tries to find a path to a particular Actor. The functions are declared as such :

native(518) final function Actor FindPathTo(vector aPoint, optional bool bSinglePath, optional bool bClearPaths);

- aPoint is the location in world coordinates you want to find a path to
- bSinglePath will tell the function to try to find a no hop (straight shot) path
- bClearPaths will tell the function to wipe clear the RouteCache array, where the paths are stored. If this is False or omitted, the found path will be added to the end of whatever path is in RouteCache already.

native(517) final function Actor FindPathToward(actor anActor, optional bool bSinglePath, optional bool bClearPaths);

- anActor is the Actor the function will try to find a path to
- bSinglePath will tell the function to try to find a no hop (straight shot) path
- bClearPaths will tell the function to wipe clear the RouteCache array, where the paths are stored. If this is False or omitted, the found path will be added to the end of whatever path is in RouteCache already.
In order for these two functions to do you any good, the Pawn subclass must first have it's collision set to (bCollideWorld, bCollideActors, bBlockActors, and bBlockPlayers), the DefaultProperty values of those four bools need to also be set to True, the CollisionHeight and CollisionRadius must be non-zero, and the Pawn subclass must be standing on the ground. If these conditions are met, a call to FindPathTo/ward will result in the array RouteCache to be modified/filled according to whether or not a route was found and if bClearPaths was True, False, or omitted. Keep in mind that simply calling FindPathTo/ward() will not result in movement. Custom AI will have to handle the actual movement based upon the RouteCache array, while Bots and other Pawn subclasses are complex, with states doing many different things. This tutorial couldn't hope to cover the Bot AI without turning into a dissertation.
In-map network. The network layed out in the map has to follow some basic, but simple rules :
- all pathnodes must be close to the ground (within 32 Unreal units). This is not only key and vital, but the cause of more problems when dealing with the pathing network than anything else - literally, despite whatever size CollisionHeight is set to in the Pawn subclass, the pathnodes MUST be within 32 Unreal units of the level geometry below them
- pathnodes must be within 1000 Unreal units in order for a path to be built
- a path is built between any pathnode within LOS (Line Of Sight) of each other.
Paths, when displayed in Ued (right click on a view window's menu area, select View->paths), will be one of two colors :
Blue : the path between the two pathnodes is considered a good path, free of obstruction with enough width clearance
Red : the path between the two pathnodes is considered a poor path, though it may have LOS, there may be level geometry that would interfere with a pawn moving on the straight line between the two pathnodes
What that means blue paths will be taken over red ones, unless there is no other option other than to take a red path. You can prevent red evaluated paths be ensuring enough clearance around the pathnodes as well as the area between them.
Walking the Path
Now you should have all the basic information necessary to understanding how to create and use the NavigationPoint Networks utilized by the Unreal engine. Sadly, there are few to no references written by Epic programmer Steve Polge (originator of the AI used in Unreal / UT) which adequately cover the basics from a programmer's standpoint. Hopefully, you will have found this quick tutorial useful enough to get started on learning the intricate details of the Unreal / UT AI.
suggestions? questions? comments? please send them all to ray@beyondunreal.com

copyright 2001 ray davis. this site and all content belongs to me unless otherwise noted, with the exception of some tutorials. the authors retain the rights to their material, and are hosted here with their express permission. everything else is mine though, so don't steal it. bastards.
privacy