A* Pathfinding Project  4.1.0
The A* Pathfinding Project for Unity 3D
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Events Macros Groups Pages
RichAI Class Reference

Advanced AI for navmesh based graphs. More...

Detailed Description

Advanced AI for navmesh based graphs.

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

Public Member Functions

override void OnPathComplete (Path p)
 Called when a requested path has been calculated.
 
override void SearchPath ()
 Recalculate the current path.
 
override void Teleport (Vector3 newPosition, bool clearPath=true)
 Instantly move the agent to a new position.
 
void UpdatePath ()
 Force recalculation of the current path.
 
- Public Member Functions inherited from AIBase
virtual Vector3 GetFeetPosition ()
 Position of the base of the character.
 
void MovementUpdate (float deltaTime, bool useGravity)
 Calculate all movement for a single movement step and move the character.
 
- Public Member Functions inherited from IAstarAI
void MovementUpdate (float deltaTime, bool useGravity)
 Calculate all movement for a single movement step and move the agent.
 
void SearchPath ()
 Recalculate the current path.
 
void Teleport (Vector3 newPosition, bool clearPath=true)
 Instantly move the agent to a new position.
 
- Public Member Functions inherited from IAstarAIMovement
Vector3 ClampToNavmesh (Vector3 position, out bool positionChanged)
 Clamps the agent's position to the navmesh.
 
void Move (Vector3 position, Vector3 deltaPosition)
 Move the agent.
 
void RotateTowards (Vector3 direction, float maxDegrees)
 Rotates towards the specified direction.
 
void UpdateVelocity (Vector3 position)
 To be called after all movement is done with the position of the agent.
 

Public Attributes

float acceleration = 5
 Max acceleration of the agent.
 
float endReachedDistance = 0.01f
 Max distance to the endpoint to consider it reached.
 
bool funnelSimplification = false
 Use funnel simplification.
 
System.Func< RichSpecial,
IEnumerator > 
onTraverseOffMeshLink
 Called when the agent starts to traverse an off-mesh link.
 
float rotationSpeed = 360
 Max rotation speed of the agent.
 
float slowdownTime = 0.5f
 How long before reaching the end of the path to start to slow down.
 
bool slowWhenNotFacingTarget = true
 Slow down when not facing the target direction.
 
float wallDist = 1
 Walls within this range will be used for avoidance.
 
float wallForce = 3
 Force to avoid walls with.
 
- Public Attributes inherited from AIBase
bool canMove = true
 Enables or disables movement completely.
 
bool canSearch = true
 Enables or disables recalculating the path at regular intervals.
 
float centerOffset = 1
 Offset along the Y coordinate for the ground raycast start position.
 
Vector3 gravity = new Vector3(float.NaN, float.NaN, float.NaN)
 Gravity to use.
 
LayerMask groundMask = -1
 Layer mask to use for ground placement.
 
float maxSpeed = 1
 Max speed in world units per second.
 
IMovementPlane movementPlane = GraphTransform.identityTransform
 Plane which this agent is moving in.
 
float repathRate = 0.5f
 Determines how often the agent will search for new paths (in seconds).
 
bool rotationIn2D = false
 If true, the forward axis of the character will be along the Y axis instead of the Z axis.
 
bool updatePosition = true
 Determines if the character should move or if just the desired velocities should be calculated.
 
bool updateRotation = true
 Determines if the character should rotate automatically.
 

Protected Member Functions

override Vector3 ClampToNavmesh (Vector3 position, out bool positionChanged)
 Constrains the character's position to lie on the navmesh.
 
override void MovementUpdateInternal (float deltaTime)
 Called during either Update or FixedUpdate depending on if rigidbodies are used for movement or not.
 
void NextPart ()
 Declare that the AI has completely traversed the current part.
 
override void OnDisable ()
 Called when the component is disabled.
 
override void OnDrawGizmos ()
 
virtual void OnTargetReached ()
 Called when the end of the path is reached.
 
override int OnUpgradeSerializedData (int version, bool unityThread)
 Handle serialization backwards compatibility.
 
IEnumerator TraverseOffMeshLinkFallback (RichSpecial link)
 Fallback for traversing off-mesh links in case onTraverseOffMeshLink is not set.
 
virtual IEnumerator TraverseSpecial (RichSpecial link)
 Traverses an off-mesh link.
 
virtual Vector3 UpdateTarget (RichFunnel fn)
 
- Protected Member Functions inherited from AIBase
 AIBase ()
 
void ApplyGravity (float deltaTime)
 Accelerates the agent downwards.
 
override void Awake ()
 Initializes reference variables.
 
Vector2 CalculateDeltaToMoveThisFrame (Vector2 position, float distanceToEndOfPath, float deltaTime)
 Calculates how far to move during a single frame.
 
virtual void CalculatePathRequestEndpoints (out Vector3 start, out Vector3 end)
 Outputs the start point and end point of the next automatic path request.
 
void CancelCurrentPathRequest ()
 
virtual void FixedUpdate ()
 Called every physics update.
 
virtual void OnEnable ()
 Called when the component is enabled.
 
Vector3 RaycastPosition (Vector3 position, float lastElevation)
 Checks if the character is grounded and prevents ground penetration.
 
IEnumerator RepeatTrySearchPath ()
 Tries to search for a path every repathRate seconds.
 
virtual void RotateTowards (Vector2 direction, float maxDegrees)
 Rotates towards the specified direction.
 
virtual void Start ()
 Starts searching for paths.
 
virtual void Update ()
 Called every frame.
 
void UpdateVelocity (Vector3 position)
 

Protected Attributes

bool delayUpdatePath
 
float distanceToSteeringTarget = float.PositiveInfinity
 Distance to steeringTarget in the movement plane.
 
bool lastCorner
 
readonly List< Vector3 > nextCorners = new List<Vector3>()
 
readonly RichPath richPath = new RichPath()
 Holds the current path that this agent is following.
 
bool traversingSpecialPath
 
readonly List< Vector3 > wallBuffer = new List<Vector3>()
 
- Protected Attributes inherited from AIBase
CharacterController controller
 Cached CharacterController component.
 
Vector3 lastDeltaPosition
 Amount which the character wants or tried to move with during the last frame.
 
float lastDeltaTime
 Delta time used for movement during the last frame.
 
float lastRepath = float.NegativeInfinity
 Time when the last path request was started.
 
Vector3 prevPosition1
 Position of the character at the end of the last frame.
 
Vector3 prevPosition2
 Position of the character at the end of the frame before the last frame.
 
Rigidbody rigid
 Cached Rigidbody component.
 
Rigidbody2D rigid2D
 Cached Rigidbody component.
 
RVOController rvoController
 Cached RVOController component.
 
Seeker seeker
 Cached Seeker component.
 
Transform tr
 Cached Transform component.
 
Vector2 velocity2D
 Current desired velocity of the agent (does not include local avoidance and physics).
 
float verticalVelocity
 Velocity due to gravity.
 
bool waitingForPathCalculation = false
 Only when the previous path has been calculated should the script consider searching for a new path.
 

Static Protected Attributes

static readonly Color GizmoColorPath = new Color(8.0f/255, 78.0f/255, 194.0f/255)
 
- Static Protected Attributes inherited from AIBase
static readonly Color GizmoColorRaycast = new Color(118.0f/255, 206.0f/255, 112.0f/255)
 

Properties

Animation anim [get, set]
 Anim for off-mesh links.
 
bool ApproachingPartEndpoint [get]
 
bool approachingPartEndpoint [get]
 True if approaching the last waypoint in the current part of the path.
 
bool ApproachingPathEndpoint [get]
 
bool approachingPathEndpoint [get]
 True if approaching the last waypoint of all parts in the current path.
 
bool IAstarAI. canMove [get, set]
 Enables or disables movement completely.
 
bool IAstarAI. canSearch [get, set]
 Enables or disables recalculating the path at regular intervals.
 
float DistanceToNextWaypoint [get]
 
bool hasPath [get]
 True if this agent currently has a path that it follows.
 
float IAstarAI. maxSpeed [get, set]
 Max speed in world units per second.
 
Vector3 NextWaypoint [get]
 Waypoint that the agent is moving towards.
 
bool PathPending [get]
 True if a path to the target is currently being calculated.
 
bool pathPending [get]
 True if a path is currently being calculated.
 
Vector3 IAstarAI. position [get]
 Position of the agent.
 
float remainingDistance [get]
 Remaining distance along the current path to the destination.
 
bool repeatedlySearchPaths [get, set]
 Search for new paths repeatedly.
 
override bool shouldRecalculatePath [get]
 
Vector3 steeringTarget [get, set]
 Point on the path which the agent is currently moving towards.
 
Vector3 TargetPoint [get]
 Current waypoint that the agent is moving towards.
 
bool TargetReached [get]
 True if the agent is within endReachedDistance units from the end of the current path.
 
bool targetReached [get]
 True if the agent has reached the end of the current path.
 
bool TraversingSpecial [get]
 
Vector3 Velocity [get]
 Current velocity of the agent.
 
- Properties inherited from AIBase
Vector3 desiredVelocity [get]
 Velocity that this agent wants to move with.
 
Vector3 destination [get, set]
 Position in the world that this agent should move to.
 
bool isStopped [get, set]
 Gets or sets if the agent should stop moving.
 
System.Action onSearchPath [get, set]
 
virtual bool shouldRecalculatePath [get]
 True if the path should be automatically recalculated as soon as possible.
 
Transform target [get, set]
 Target to move towards.
 
bool usingGravity [get, set]
 Indicates if gravity is used during this frame.
 
Vector3 velocity [get]
 Actual velocity that the agent is moving with.
 
- Properties inherited from IAstarAI
bool canMove [get, set]
 Enables or disables movement completely.
 
bool canSearch [get, set]
 Enables or disables recalculating the path at regular intervals.
 
Vector3 desiredVelocity [get]
 Velocity that this agent wants to move with.
 
Vector3 destination [get, set]
 Position in the world that this agent should move to.
 
bool hasPath [get]
 True if this agent currently has a path that it follows.
 
bool isStopped [get, set]
 Gets or sets if the agent should stop moving.
 
float maxSpeed [get, set]
 Max speed in world units per second.
 
System.Action onSearchPath [get, set]
 Called when the agent recalculates its path.
 
bool pathPending [get]
 True if a path is currently being calculated.
 
Vector3 position [get]
 Position of the agent.
 
float remainingDistance [get]
 Remaining distance along the current path to the destination.
 
Vector3 steeringTarget [get]
 Point on the path which the agent is currently moving towards.
 
bool targetReached [get]
 True if the agent has reached the end of the current path.
 
Vector3 velocity [get]
 Actual velocity that the agent is moving with.
 

Private Member Functions

Vector2 CalculateWallForce (Vector2 position, float elevation, Vector2 directionToTarget)
 
Vector3 IAstarAIMovement. ClampToNavmesh (Vector3 position, out bool positionChanged)
 Clamps the agent's position to the navmesh.
 
void FinalMovement (Vector3 position3D, float deltaTime, float distanceToEndOfPath, float slowdownFactor)
 
void IAstarAIMovement. Move (Vector3 position, Vector3 deltaPosition)
 Move the agent.
 
void IAstarAIMovement. RotateTowards (Vector3 direction, float maxDegrees)
 Rotates towards the specified direction.
 
void TraverseFunnel (RichFunnel fn, float deltaTime)
 
void IAstarAIMovement. UpdateVelocity (Vector3 position)
 To be called after all movement is done with the position of the agent.
 

Private Attributes

Animation animCompatibility
 

Member Function Documentation

Vector2 CalculateWallForce ( Vector2  position,
float  elevation,
Vector2  directionToTarget 
)
private
override Vector3 ClampToNavmesh ( Vector3  position,
out bool  positionChanged 
)
protectedvirtual

Constrains the character's position to lie on the navmesh.

Not all movement scripts have support for this.

Parameters
positionCurrent position of the character.
positionChangedTrue if the character's position was modified by this method.
Returns
New position of the character that has been clamped to the navmesh.

Reimplemented from AIBase.

Vector3 IAstarAIMovement. ClampToNavmesh ( Vector3  position,
out bool  positionChanged 
)
privatevirtual

Clamps the agent's position to the navmesh.

Parameters
positionPosition of the agent.
positionChangedTrue if the agent's position had to be modified.
Returns
New position of the agent that has been clamped to the navmesh.
Note
This will not update the position of the agent's Transform component. It is assumed that the caller will do that later.

Reimplemented from AIBase.

void FinalMovement ( Vector3  position3D,
float  deltaTime,
float  distanceToEndOfPath,
float  slowdownFactor 
)
private
void IAstarAIMovement. Move ( Vector3  position,
Vector3  deltaPosition 
)
privatevirtual

Move the agent.

Parameters
positionPosition of the agent.
deltaPositionDirection and distance to move the agent in world space.

Reimplemented from AIBase.

override void MovementUpdateInternal ( float  deltaTime)
protectedvirtual

Called during either Update or FixedUpdate depending on if rigidbodies are used for movement or not.

Implements AIBase.

void NextPart ( )
protected

Declare that the AI has completely traversed the current part.

This will skip to the next part, or call OnTargetReached if this was the last part

override void OnDisable ( )
protectedvirtual

Called when the component is disabled.

Reimplemented from AIBase.

override void OnDrawGizmos ( )
protectedvirtual

Reimplemented from AIBase.

override void OnPathComplete ( Path  newPath)
virtual

Called when a requested path has been calculated.

Implements AIBase.

virtual void OnTargetReached ( )
protectedvirtual

Called when the end of the path is reached.

override int OnUpgradeSerializedData ( int  version,
bool  unityThread 
)
protectedvirtual

Handle serialization backwards compatibility.

Reimplemented from AIBase.

void IAstarAIMovement. RotateTowards ( Vector3  direction,
float  maxDegrees 
)
private

Rotates towards the specified direction.

Parameters
directionDirection rotate towards.
maxDegreesMaximum number of degrees to rotate this frame.

override void SearchPath ( )
virtual

Recalculate the current path.

You can for example use this if you want very quick reaction times when you have changed the destination so that the agent does not have to wait until the next automatic path recalculation (see canSearch).If there is an ongoing path calculation, it will be canceled, so make sure you leave time for the paths to get calculated before calling this function again. A canceled path will show up in the log with the message "Canceled by script" (see Seeker.CancelCurrentPathRequest()).If no destination has been set yet then nothing will be done.

Note
The path result may not become available until after a few frames. During the calculation time the pathPending property will return true.
See Also
pathPending

Reimplemented from AIBase.

override void Teleport ( Vector3  newPosition,
bool  clearPath = true 
)
virtual

Instantly move the agent to a new position.

This will trigger a path recalculation (if clearPath is true, which is the default) so if you want to teleport the agent and change its destination it is recommended that you set the destination before calling this method.The current path will be cleared by default.

See Also
Works similarly to Unity's NavmeshAgent.Warp.
SearchPath

When setting transform.position directly the agent will be clamped to the part of the navmesh it can reach, so it may not end up where you wanted it to. This ensures that the agent can move to any part of the navmesh.

Reimplemented from AIBase.

void TraverseFunnel ( RichFunnel  fn,
float  deltaTime 
)
private
IEnumerator TraverseOffMeshLinkFallback ( RichSpecial  link)
protected

Fallback for traversing off-mesh links in case onTraverseOffMeshLink is not set.

This will do a simple linear interpolation along the link.

virtual IEnumerator TraverseSpecial ( RichSpecial  link)
protectedvirtual

Traverses an off-mesh link.

void UpdatePath ( )

Force recalculation of the current path.

If there is an ongoing path calculation, it will be canceled (so make sure you leave time for the paths to get calculated before calling this function again).

Deprecated:
Use SearchPath instead
virtual Vector3 UpdateTarget ( RichFunnel  fn)
protectedvirtual
void IAstarAIMovement. UpdateVelocity ( Vector3  position)
private

To be called after all movement is done with the position of the agent.

Parameters
positionCurrent position of the agent (as a parameter mostly for performance reasons as reading from transform.position can be slow).

You have to call this if you are handling movement manually to make sure e.g the velocity field is up to date.This is automatically called by the Move method, so if you are using that method this should not be called.

Member Data Documentation

float acceleration = 5

Max acceleration of the agent.

In world units per second per second.

Animation animCompatibility
private
bool delayUpdatePath
protected
float distanceToSteeringTarget = float.PositiveInfinity
protected

Distance to steeringTarget in the movement plane.

float endReachedDistance = 0.01f

Max distance to the endpoint to consider it reached.

In seconds.

See Also
TargetReached
OnTargetReached
bool funnelSimplification = false

Use funnel simplification.

On tiled navmesh maps, but sometimes on normal ones as well, it can be good to simplify the funnel as a post-processing step to make the paths straighter.

This has a moderate performance impact during frames when a path calculation is completed.

The RichAI script uses its own internal funnel algorithm, so you never need to attach the FunnelModifier component.

See Also
Pathfinding.FunnelModifier
readonly Color GizmoColorPath = new Color(8.0f/255, 78.0f/255, 194.0f/255)
staticprotected
bool lastCorner
protected
readonly List<Vector3> nextCorners = new List<Vector3>()
protected
System.Func<RichSpecial, IEnumerator> onTraverseOffMeshLink

Called when the agent starts to traverse an off-mesh link.

Register to this callback to handle off-mesh links in a custom way.

If this event is set to null then the agent will fall back to traversing off-mesh links using a very simple linear interpolation.

void OnEnable () {
ai = GetComponent<RichAI>();
if (ai != null) ai.onTraverseOffMeshLink += TraverseOffMeshLink;
}
void OnDisable () {
if (ai != null) ai.onTraverseOffMeshLink -= TraverseOffMeshLink;
}
IEnumerator TraverseOffMeshLink (RichSpecial link) {
// Traverse the link over 1 second
float startTime = Time.time;
while (Time.time < startTime + 1) {
transform.position = Vector3.Lerp(link.first.position, link.second.position, Time.time - startTime);
yield return null;
}
transform.position = link.second.position;
}
readonly RichPath richPath = new RichPath()
protected

Holds the current path that this agent is following.

float rotationSpeed = 360

Max rotation speed of the agent.

In degrees per second.

float slowdownTime = 0.5f

How long before reaching the end of the path to start to slow down.

A lower value will make the agent stop more abruptly.

Note
The agent may require more time to slow down if its maximum acceleration is not high enough.

If set to zero the agent will not even attempt to slow down. This can be useful if the target point is not a point you want the agent to stop at but it might for example be the player and you want the AI to slam into the player.

Note
A value of zero will behave differently from a small but non-zero value (such as 0.0001). When it is non-zero the agent will still respect its acceleration when determining if it needs to slow down, but if it is zero it will disable that check. This is useful if the destination is not a point where you want the agent to stop.
bool slowWhenNotFacingTarget = true

Slow down when not facing the target direction.

Incurs at a small performance overhead.

bool traversingSpecialPath
protected
readonly List<Vector3> wallBuffer = new List<Vector3>()
protected
float wallDist = 1

Walls within this range will be used for avoidance.

Setting this to zero disables wall avoidance and may improve performance slightly

See Also
wallForce
float wallForce = 3

Force to avoid walls with.

The agent will try to steer away from walls slightly.

See Also
wallDist

Property Documentation

Animation anim
getset

Anim for off-mesh links.

Deprecated:
Use the onTraverseOffMeshLink event or the ... component instead. Setting this value will add a ... component
bool ApproachingPartEndpoint
get
bool approachingPartEndpoint
get

True if approaching the last waypoint in the current part of the path.

Path parts are separated by off-mesh links.

See Also
approachingPathEndpoint
bool ApproachingPathEndpoint
get
bool approachingPathEndpoint
get

True if approaching the last waypoint of all parts in the current path.

Path parts are separated by off-mesh links.

See Also
approachingPartEndpoint
bool IAstarAI. canMove
getsetprivate

Enables or disables movement completely.

If you want the agent to stand still, but still react to local avoidance and use gravity. Use isStopped instead.

See Also
canSearch
isStopped

bool IAstarAI. canSearch
getsetprivate

Enables or disables recalculating the path at regular intervals.

Setting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path.Note that this only disables automatic path recalculations. If you call the SearchPath() method a path will still be calculated.

See Also
canMove
isStopped

float DistanceToNextWaypoint
get
bool hasPath
get

True if this agent currently has a path that it follows.

float IAstarAI. maxSpeed
getsetprivate

Max speed in world units per second.

Vector3 NextWaypoint
get

Waypoint that the agent is moving towards.

This is either a corner in the path or the end of the path.

bool PathPending
get

True if a path to the target is currently being calculated.

bool pathPending
get

True if a path is currently being calculated.

Vector3 IAstarAI. position
getprivate

Position of the agent.

In world space.

See Also
Teleport

float remainingDistance
get

Remaining distance along the current path to the destination.

For the RichAI movement script this may not always be precisely known, especially when far away from the destination. In those cases an approximate distance will be returned.If the agent does not currently have a path, then positive infinity will be returned.

bool repeatedlySearchPaths
getset

Search for new paths repeatedly.

override bool shouldRecalculatePath
getprotected
Vector3 steeringTarget
getset

Point on the path which the agent is currently moving towards.

This is usually a point a small distance ahead of the agent or the end of the path.If the agent does not have a path at the moment, then the agent's current position will be returned.

Vector3 TargetPoint
get

Current waypoint that the agent is moving towards.

Deprecated:
This property has been renamed to steeringTarget
bool TargetReached
get

True if the agent is within endReachedDistance units from the end of the current path.

bool targetReached
get

True if the agent has reached the end of the current path.

bool TraversingSpecial
get
Vector3 Velocity
get

Current velocity of the agent.

Includes velocity due to gravity.


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