A* Pathfinding Project  4.1.17
The A* Pathfinding Project for Unity 3D
Seeker Class Reference

Handles path calls for a single unit. More...

Detailed Description

Handles path calls for a single unit.

This is a component which is meant to be attached to a single unit (AI, Robot, Player, whatever) to handle its pathfinding calls. It also handles post-processing of paths using modifiers.

See also
Searching for paths
Using Modifiers

Public Types

enum  ModifierPass { PreProcess, PostProcess = 2 }
 

Public Member Functions

 Seeker ()
 
void CancelCurrentPathRequest (bool pool=true)
 Stop calculating the current path request. More...
 
void DeregisterModifier (IPathModifier modifier)
 Called by modifiers when they are disabled or destroyed. More...
 
Path GetCurrentPath ()
 Path that is currently being calculated or was last calculated. More...
 
ABPath GetNewPath (Vector3 start, Vector3 end)
 Returns a new path instance. More...
 
bool IsDone ()
 Is the current path done calculating. More...
 
void OnDestroy ()
 Cleans up some variables. More...
 
void OnDrawGizmos ()
 Draws gizmos for the Seeker. More...
 
void PostProcess (Path path)
 Post Processes the path. More...
 
void RegisterModifier (IPathModifier modifier)
 Called by modifiers to register themselves. More...
 
void ReleaseClaimedPath ()
 Releases the path used for gizmos (if any). More...
 
void RunModifiers (ModifierPass pass, Path path)
 Runs modifiers on a path. More...
 
MultiTargetPath StartMultiTargetPath (Vector3 start, Vector3[] endPoints, bool pathsForAll, OnPathDelegate callback=null, int graphMask=-1)
 Starts a Multi Target Path from one start point to multiple end points. More...
 
MultiTargetPath StartMultiTargetPath (Vector3[] startPoints, Vector3 end, bool pathsForAll, OnPathDelegate callback=null, int graphMask=-1)
 Starts a Multi Target Path from multiple start points to a single target point. More...
 
MultiTargetPath StartMultiTargetPath (MultiTargetPath p, OnPathDelegate callback=null, int graphMask=-1)
 Starts a Multi Target Path. More...
 
Path StartPath (Vector3 start, Vector3 end)
 Call this function to start calculating a path. More...
 
Path StartPath (Vector3 start, Vector3 end, OnPathDelegate callback)
 Call this function to start calculating a path. More...
 
Path StartPath (Vector3 start, Vector3 end, OnPathDelegate callback, int graphMask)
 Call this function to start calculating a path. More...
 
Path StartPath (Path p, OnPathDelegate callback=null)
 Call this function to start calculating a path. More...
 
Path StartPath (Path p, OnPathDelegate callback, int graphMask)
 Call this function to start calculating a path. More...
 

Public Attributes

bool detailedGizmos
 Enables drawing of the non-postprocessed path using Gizmos. More...
 
bool drawGizmos = true
 Enables drawing of the last calculated path using Gizmos. More...
 
int graphMask = -1
 Graphs that this Seeker can use. More...
 
OnPathDelegate pathCallback
 Callback for when a path is completed. More...
 
OnPathDelegate postProcessPath
 Called after a path has been calculated, right before modifiers are executed. More...
 
OnPathDelegate preProcessPath
 Called before pathfinding is started. More...
 
StartEndModifier startEndModifier = new StartEndModifier()
 Path modifier which tweaks the start and end points of a path. More...
 
int [] tagPenalties = new int[32]
 Penalties for each tag. More...
 
int traversableTags = -1
 The tags which the Seeker can traverse. More...
 

Protected Member Functions

override void Awake ()
 Initializes a few variables. More...
 
- Protected Member Functions inherited from VersionedMonoBehaviour
virtual int OnUpgradeSerializedData (int version, bool unityThread)
 Handle serialization backwards compatibility. More...
 

Protected Attributes

uint lastPathID
 The path ID of the last path queried. More...
 
Path path
 The current path. More...
 

Private Member Functions

void OnMultiPathComplete (Path p)
 Called once for a MultiTargetPath. More...
 
void OnPartialPathComplete (Path p)
 Called for each path in a MultiTargetPath. More...
 
void OnPathComplete (Path path)
 Called when a path has completed. More...
 
void OnPathComplete (Path p, bool runModifiers, bool sendCallbacks)
 Called when a path has completed. More...
 
void StartPathInternal (Path p, OnPathDelegate callback)
 Internal method to start a path and mark it as the currently active path. More...
 

Private Attributes

List< GraphNodelastCompletedNodePath
 Used for drawing gizmos. More...
 
List< Vector3 > lastCompletedVectorPath
 Used for drawing gizmos. More...
 
readonly List< IPathModifiermodifiers = new List<IPathModifier>()
 Internal list of all modifiers. More...
 
readonly OnPathDelegate onPartialPathDelegate
 Cached delegate to avoid allocating one every time a path is started. More...
 
readonly OnPathDelegate onPathDelegate
 Cached delegate to avoid allocating one every time a path is started. More...
 
Path prevPath
 Previous path. More...
 
OnPathDelegate tmpPathCallback
 Temporary callback only called for the current path. More...
 

Member Enumeration Documentation

◆ ModifierPass

enum ModifierPass
strong
Enumerator
PreProcess 
PostProcess 

Constructor & Destructor Documentation

◆ Seeker()

Seeker ( )

Member Function Documentation

◆ Awake()

override void Awake ( )
protectedvirtual

Initializes a few variables.

Reimplemented from VersionedMonoBehaviour.

◆ CancelCurrentPathRequest()

void CancelCurrentPathRequest ( bool  pool = true)

Stop calculating the current path request.

If this Seeker is currently calculating a path it will be canceled. The callback (usually to a method named OnPathComplete) will soon be called with a path that has the 'error' field set to true.

This does not stop the character from moving, it just aborts the path calculation.

Parameters
poolIf true then the path will be pooled when the pathfinding system is done with it.

◆ DeregisterModifier()

void DeregisterModifier ( IPathModifier  modifier)

Called by modifiers when they are disabled or destroyed.

◆ GetCurrentPath()

Path GetCurrentPath ( )

Path that is currently being calculated or was last calculated.

You should rarely have to use this. Instead get the path when the path callback is called.

See also
pathCallback

◆ GetNewPath()

ABPath GetNewPath ( Vector3  start,
Vector3  end 
)

Returns a new path instance.

The path will be taken from the path pool if path recycling is turned on.
This path can be sent to StartPath(Path,OnPathDelegate,int) with no change, but if no change is required StartPath(Vector3,Vector3,OnPathDelegate) does just that.

var seeker = GetComponent<Seeker>();
Path p = seeker.GetNewPath (transform.position, transform.position+transform.forward*100);
// Disable heuristics on just this path for example
p.heuristic = Heuristic.None;
seeker.StartPath (p, OnPathComplete);
Deprecated:
Use ABPath.Construct(start, end, null) instead.

◆ IsDone()

bool IsDone ( )

Is the current path done calculating.

Returns true if the current path has been returned or if the path is null.

Note
Do not confuse this with Pathfinding.Path.IsDone. They usually return the same value, but not always since the path might be completely calculated, but it has not yet been processed by the Seeker.
Since
Added in 3.0.8
Version
Behaviour changed in 3.2

◆ OnDestroy()

void OnDestroy ( )

Cleans up some variables.

Releases any eventually claimed paths. Calls OnDestroy on the startEndModifier.

See also
ReleaseClaimedPath
startEndModifier

◆ OnDrawGizmos()

void OnDrawGizmos ( )

Draws gizmos for the Seeker.

◆ OnMultiPathComplete()

void OnMultiPathComplete ( Path  p)
private

Called once for a MultiTargetPath.

Only returns the path, does not post process.

A* Pro Feature:
This is an A* Pathfinding Project Pro feature only. This function/class/variable might not exist in the Free version of the A* Pathfinding Project or the functionality might be limited
The Pro version can be bought here

◆ OnPartialPathComplete()

void OnPartialPathComplete ( Path  p)
private

Called for each path in a MultiTargetPath.

Only post processes the path, does not return it.

A* Pro Feature:
This is an A* Pathfinding Project Pro feature only. This function/class/variable might not exist in the Free version of the A* Pathfinding Project or the functionality might be limited
The Pro version can be bought here

◆ OnPathComplete() [1/2]

void OnPathComplete ( Path  path)
private

Called when a path has completed.

This should have been implemented as optional parameter values, but that didn't seem to work very well with delegates (the values weren't the default ones)

See also
OnPathComplete(Path,bool,bool)

◆ OnPathComplete() [2/2]

void OnPathComplete ( Path  p,
bool  runModifiers,
bool  sendCallbacks 
)
private

Called when a path has completed.

Will post process it and return it by calling tmpPathCallback and pathCallback

◆ PostProcess()

void PostProcess ( Path  path)

Post Processes the path.

This will run any modifiers attached to this GameObject on the path. This is identical to calling RunModifiers(ModifierPass.PostProcess, path)

See also
RunModifiers
Since
Added in 3.2

◆ RegisterModifier()

void RegisterModifier ( IPathModifier  modifier)

Called by modifiers to register themselves.

◆ ReleaseClaimedPath()

void ReleaseClaimedPath ( )

Releases the path used for gizmos (if any).

The seeker keeps the latest path claimed so it can draw gizmos. In some cases this might not be desireable and you want it released. In that case, you can call this method to release it (not that path gizmos will then not be drawn).

If you didn't understand anything from the description above, you probably don't need to use this method.

See also
Pooling

◆ RunModifiers()

void RunModifiers ( ModifierPass  pass,
Path  path 
)

Runs modifiers on a path.

◆ StartMultiTargetPath() [1/3]

MultiTargetPath StartMultiTargetPath ( Vector3  start,
Vector3 []  endPoints,
bool  pathsForAll,
OnPathDelegate  callback = null,
int  graphMask = -1 
)

Starts a Multi Target Path from one start point to multiple end points.

A Multi Target Path will search for all the end points in one search and will return all paths if pathsForAll is true, or only the shortest one if pathsForAll is false.

Parameters
startThe start point of the path
endPointsThe end points of the path
pathsForAllIndicates whether or not a path to all end points should be searched for or only to the closest one
callbackThe function to call when the path has been calculated
graphMaskMask used to specify which graphs should be searched for close nodes. See Pathfinding.NNConstraint.graphMask.

callback and pathCallback will be called when the path has completed. Callback will not be called if the path is canceled (e.g when a new path is requested before the previous one has completed)

A* Pro Feature:
This is an A* Pathfinding Project Pro feature only. This function/class/variable might not exist in the Free version of the A* Pathfinding Project or the functionality might be limited
The Pro version can be bought here

See also
Pathfinding.MultiTargetPath
Example of how to use multi-target-paths

◆ StartMultiTargetPath() [2/3]

MultiTargetPath StartMultiTargetPath ( Vector3 []  startPoints,
Vector3  end,
bool  pathsForAll,
OnPathDelegate  callback = null,
int  graphMask = -1 
)

Starts a Multi Target Path from multiple start points to a single target point.

A Multi Target Path will search from all start points to the target point in one search and will return all paths if pathsForAll is true, or only the shortest one if pathsForAll is false.

Parameters
startPointsThe start points of the path
endThe end point of the path
pathsForAllIndicates whether or not a path from all start points should be searched for or only to the closest one
callbackThe function to call when the path has been calculated
graphMaskMask used to specify which graphs should be searched for close nodes. See Pathfinding.NNConstraint.graphMask.

callback and pathCallback will be called when the path has completed. Callback will not be called if the path is canceled (e.g when a new path is requested before the previous one has completed)

A* Pro Feature:
This is an A* Pathfinding Project Pro feature only. This function/class/variable might not exist in the Free version of the A* Pathfinding Project or the functionality might be limited
The Pro version can be bought here

See also
Pathfinding.MultiTargetPath
Example of how to use multi-target-paths

◆ StartMultiTargetPath() [3/3]

MultiTargetPath StartMultiTargetPath ( MultiTargetPath  p,
OnPathDelegate  callback = null,
int  graphMask = -1 
)

Starts a Multi Target Path.

Takes a MultiTargetPath and wires everything up for it to send callbacks to the seeker for post-processing.

Parameters
pThe path to start calculating
callbackThe function to call when the path has been calculated
graphMaskMask used to specify which graphs should be searched for close nodes. See Pathfinding.NNConstraint.graphMask.

callback and pathCallback will be called when the path has completed. Callback will not be called if the path is canceled (e.g when a new path is requested before the previous one has completed)

A* Pro Feature:
This is an A* Pathfinding Project Pro feature only. This function/class/variable might not exist in the Free version of the A* Pathfinding Project or the functionality might be limited
The Pro version can be bought here

See also
Pathfinding.MultiTargetPath
Example of how to use multi-target-paths
Version
Since 3.8.3 calling this method behaves identically to calling StartPath with a MultiTargetPath.
Since 3.8.3 this method also sets enabledTags and tagPenalties on the path object.
Deprecated:
You can use StartPath instead of this method now. It will behave identically.

◆ StartPath() [1/5]

Path StartPath ( Vector3  start,
Vector3  end 
)

Call this function to start calculating a path.

Since this method does not take a callback parameter, you should set the pathCallback field before calling this method.

Parameters
startThe start point of the path
endThe end point of the path

◆ StartPath() [2/5]

Path StartPath ( Vector3  start,
Vector3  end,
OnPathDelegate  callback 
)

Call this function to start calculating a path.

Parameters
startThe start point of the path
endThe end point of the path
callbackThe function to call when the path has been calculated

callback will be called when the path has completed. Callback will not be called if the path is canceled (e.g when a new path is requested before the previous one has completed)

◆ StartPath() [3/5]

Path StartPath ( Vector3  start,
Vector3  end,
OnPathDelegate  callback,
int  graphMask 
)

Call this function to start calculating a path.

Parameters
startThe start point of the path
endThe end point of the path
callbackThe function to call when the path has been calculated
graphMaskMask used to specify which graphs should be searched for close nodes. See Pathfinding.NNConstraint.graphMask. This will override graphMask for this path request.

callback will be called when the path has completed. Callback will not be called if the path is canceled (e.g when a new path is requested before the previous one has completed)

◆ StartPath() [4/5]

Path StartPath ( Path  p,
OnPathDelegate  callback = null 
)

Call this function to start calculating a path.

Parameters
pThe path to start calculating
callbackThe function to call when the path has been calculated

The callback will be called when the path has been calculated (which may be several frames into the future). The callback will not be called if a new path request is started before this path request has been calculated.

Version
Since 3.8.3 this method works properly if a MultiTargetPath is used. It now behaves identically to the StartMultiTargetPath(MultiTargetPath) method.
Since 4.1.x this method will no longer overwrite the graphMask on the path unless it is explicitly passed as a parameter (see other overloads of this method).

◆ StartPath() [5/5]

Path StartPath ( Path  p,
OnPathDelegate  callback,
int  graphMask 
)

Call this function to start calculating a path.

Parameters
pThe path to start calculating
callbackThe function to call when the path has been calculated
graphMaskMask used to specify which graphs should be searched for close nodes. See Pathfinding.NNConstraint.graphMask. This will override graphMask for this path request.

The callback will be called when the path has been calculated (which may be several frames into the future). The callback will not be called if a new path request is started before this path request has been calculated.

Version
Since 3.8.3 this method works properly if a MultiTargetPath is used. It now behaves identically to the StartMultiTargetPath(MultiTargetPath) method.

◆ StartPathInternal()

void StartPathInternal ( Path  p,
OnPathDelegate  callback 
)
private

Internal method to start a path and mark it as the currently active path.

Member Data Documentation

◆ detailedGizmos

bool detailedGizmos

Enables drawing of the non-postprocessed path using Gizmos.

The path will show up in orange.

Requires that drawGizmos is true.

This will show the path before any post processing such as smoothing is applied.

See also
drawGizmos
OnDrawGizmos

◆ drawGizmos

bool drawGizmos = true

Enables drawing of the last calculated path using Gizmos.

The path will show up in green.

See also
OnDrawGizmos

◆ graphMask

int graphMask = -1

Graphs that this Seeker can use.

This field determines which graphs will be considered when searching for the start and end nodes of a path. It is useful in numerous situations, for example if you want to make one graph for small units and one graph for large units.

This is a bitmask so if you for example want to make the agent only use graph index 3 then you can set this to:

seeker.graphMask = 1 << 3;
See also
Bitmask Tutorial

Note that this field only stores which graph indices that are allowed. This means that if the graphs change their ordering then this mask may no longer be correct.

If you know the name of the graph you can set the mask like this:

var name = "My Graph Name";
var graphMask = 1 << (int)AstarPath.active.data.FindGraph(g => g.name == name).graphIndex;

Some overloads of the StartPath methods take a graphMask parameter. If those overloads are used then they will override the graph mask for that path request.

See also
Multiple agent types

◆ lastCompletedNodePath

List<GraphNode> lastCompletedNodePath
private

Used for drawing gizmos.

◆ lastCompletedVectorPath

List<Vector3> lastCompletedVectorPath
private

Used for drawing gizmos.

◆ lastPathID

uint lastPathID
protected

The path ID of the last path queried.

◆ modifiers

readonly List<IPathModifier> modifiers = new List<IPathModifier>()
private

Internal list of all modifiers.

◆ onPartialPathDelegate

readonly OnPathDelegate onPartialPathDelegate
private

Cached delegate to avoid allocating one every time a path is started.

◆ onPathDelegate

readonly OnPathDelegate onPathDelegate
private

Cached delegate to avoid allocating one every time a path is started.

◆ path

Path path
protected

The current path.

◆ pathCallback

OnPathDelegate pathCallback

Callback for when a path is completed.

Movement scripts should register to this delegate.
A temporary callback can also be set when calling StartPath, but that delegate will only be called for that path

◆ postProcessPath

OnPathDelegate postProcessPath

Called after a path has been calculated, right before modifiers are executed.

◆ preProcessPath

OnPathDelegate preProcessPath

Called before pathfinding is started.

◆ prevPath

Path prevPath
private

Previous path.

Used to draw gizmos

◆ startEndModifier

StartEndModifier startEndModifier = new StartEndModifier()

Path modifier which tweaks the start and end points of a path.

◆ tagPenalties

int [] tagPenalties = new int[32]

Penalties for each tag.

Tag 0 which is the default tag, will have added a penalty of tagPenalties[0]. These should only be positive values since the A* algorithm cannot handle negative penalties.

Note
This array should always have a length of 32 otherwise the system will ignore it.
See also
Pathfinding.Path.tagPenalties

◆ tmpPathCallback

OnPathDelegate tmpPathCallback
private

Temporary callback only called for the current path.

This value is set by the StartPath functions

◆ traversableTags

int traversableTags = -1

The tags which the Seeker can traverse.

Note
This field is a bitmask.
See also
Bitmask Tutorial

The documentation for this class was generated from the following file: