Running on all Unity licenses and platforms, Path requires no additional installs once you have it imported into your project.
The editor interface of Path is extremely simple, yet powerful:
- One central Navigation component for general setup.
- Add waypoints and drag them around with regular position handles.
- One Navigator component per pathfinding agent.
- Tweak min/max connection- and waypoint width for automatic network generation.
Runtime, Path offers a similar API:
- Start path calculations by simply assigning the targetPosition variable.
- Path pre-calculation.
- Custom weights based on tagging.
- Path invalidation.
- Automatically form new ideal connections on scene addition load/generation.
Video material:
Navigation
Access
Navigation
Description
Path system root. This class is the core of the Path system. All nodes and connections register here and the Navigator pulls data from here – as can your own code.
Functions
static | Waypoint | GetNearestNode (Vector3 position, Navigator navigator) |
static | Waypoint | GetNearestNode (Vector3 position) |
static | void | AutoScale (LayerMask layerMask, float minWidth, float maxWidth, float step) |
static | void | AutoConnect (LayerMask layerMask, float minWidth, float maxWidth, float step) |
Properties
static | int | SeekerIterationCap [get, set] |
static | ReadOnlyCollection<Waypoint> | Waypoints [get] |
Navigator
Access
Navigator
Description
Runtime pathfinding interface. This is your runtime interface for Path. The navigator can be given a position to pathfind for, via the targetPosition variable, or you can call RequestPath in order to pre-calculate pathes.
Functions
bool | DirectPath (Vector3 fromPosition, Vector3 toPosition) |
bool | DirectPath (Vector3 toPosition) |
void | ReSeek () |
void | RequestPath (Vector3 startPosition, Vector3 endPosition) |
void | RegisterWeightHandler (string tag, WeightHandler handler) |
Variables
Vector3 | targetPosition = Vector3.zero |
float | width = 1.0f |
bool | selfTargetOnAwake = true |
LayerMask | pathBlockingLayers = 0 |
bool | takeShortcuts = true |
Sent messages
OnNewPath (Path path) |
OnTargetUnreachable () |
OnPathAvailable (Path path) |
OnPathUnavailable () |
OnPathInvalidated (Path path) |
Path
Access
Path
Description
Pathfinding result for passing to your path follower logic.
Functions
void | ArrivedAt (Waypoint waypoint) |
bool | Contains (Connection connection) |
bool | Contains (Waypoint waypoint) |
void | OnDrawGizmos () |
string | ToString () |
Properties
Vector3 | StartPosition [get] |
Vector3 | EndPosition [get] |
Waypoint | StartNode [get] |
Waypoint | EndNode [get] |
ReadOnlyCollection<Connection> | Segments [get] |
float | SeekTime [get, set] |
Navigator | Owner [get] |
bool | Valid [get] |
Waypoint
Access
Waypoint
Description
A Path waypoint. Each waypoint is defined by a Position, a Radius and optinally a list of Connections.
Functions
void | RemoveConnection (Connection connection) |
void | RemoveConnection (Waypoint waypoint) |
bool | ConnectsTo (Waypoint waypoint) |
void | Disconnect () |
bool | Contains (Vector3 position) |
string | ToString () |
Properties
ReadOnlyCollection<Connection> | Connections [get] |
bool | Enabled [get, set] |
Vector3 | Position [get, set] |
float | Radius [get, set] |
string | Tag [get, set] |
Connection
Access
Connection
Description
A connection between two Path nodes.
Functions
Connection (Waypoint from, Waypoint to) | |
string | ToString () |
Properties
Waypoint | From [get] |
Waypoint | To [get] |
float | Width [get, set] |
string | Tag [get, set] |
bool | Enabled [get, set] |
float | Cost [get] |
Tutorial: Pathfinding in two lines
So you need no-nonsense pathfinding and fast? Not a problem. This brief tutorial explains how to interface with Path from your code as simple as possible.
Prerequisites:
- The Path package has been imported into your project.
- You’ve set up some waypoints and connected them in the editor. If you’re not sure how to do this, please check out the “Intro to Path 2.0b1” video.
- To handle your pathfinding, you’ve created a script file and attached it to the same GameObject as your Navigator component.
Ok, here we go. Hang tight.
- In your MonoBehaviour script, where you want to initiate pathfinding to some point (in my case I’ve stored the point in a Vector3 variable named myDestinationPoint), add the following line:
GetComponent<Navigator> ().targetPosition = myDestinationPoint;
- Somewhere in the same script or another script attached to the same GameObject, add the following line:
public void OnNewPath (Path path) { Debug.Log ("Path: " + path); }
- Put on a nice tune and make a kick-ass game!