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

RichAI for local space (pathfinding on moving graphs). More...

Detailed Description

RichAI for local space (pathfinding on moving graphs).

What this script does is that it fakes graph movement. It can be seen in the example scene called 'Moving' where a character is pathfinding on top of a moving ship. The graph does not actually move in that example instead there is some 'cheating' going on.

When requesting a path, we first transform the start and end positions of the path request into local space for the object we are moving on (e.g the ship in the example scene), then when we get the path back, they will still be in these local coordinates. When following the path, we will every frame transform the coordinates of the waypoints in the path to global coordinates so that we can follow them.

At the start of the game (when the graph is scanned) the object we are moving on should be at a valid position on the graph and you should attach the Pathfinding.LocalSpaceGraph component to it. The Pathfinding.LocalSpaceGraph component will store the position and orientation of the object right there are the start and then we can use that information to transform coordinates back to that region of the graph as if the object had not moved at all.

This functionality is only implemented for the RichAI script, however it should not be hard to use the same approach for other movement scripts.

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 Attributes

LocalSpaceGraph graph
 Root of the object we are moving on.
 
- Public Attributes inherited from RichAI
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's position should be coupled to the Transform's position.
 
bool updateRotation = true
 Determines if the character's rotation should be coupled to the Transform's rotation.
 

Protected Member Functions

override void CalculatePathRequestEndpoints (out Vector3 start, out Vector3 end)
 Outputs the start point and end point of the next automatic path request.
 
override void Start ()
 Starts searching for paths.
 
override void Update ()
 Called every frame.
 
- Protected Member Functions inherited from RichAI
override Vector3 ClampToNavmesh (Vector3 position, out bool positionChanged)
 Constrains the character's position to lie on the navmesh.
 
override void MovementUpdateInternal (float deltaTime, out Vector3 nextPosition, out Quaternion nextRotation)
 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.
 
Vector2 CalculateDeltaToMoveThisFrame (Vector2 position, float distanceToEndOfPath, float deltaTime)
 Calculates how far to move during a single frame.
 
void CancelCurrentPathRequest ()
 
virtual void FindComponents ()
 
virtual void FixedUpdate ()
 Called every physics update.
 
virtual void OnDrawGizmosSelected ()
 
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.
 
Quaternion SimulateRotationTowards (Vector2 direction, float maxDegrees)
 Simulates rotating the agent towards the specified direction and returns the new rotation.
 
void UpdateVelocity ()
 
- Protected Member Functions inherited from VersionedMonoBehaviour
virtual void Awake ()
 

Private Member Functions

void RefreshTransform ()
 

Additional Inherited Members

- Public Member Functions inherited from RichAI
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.
 
- Protected Attributes inherited from RichAI
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.
 
readonly List< Vector3 > wallBuffer = new List<Vector3>()
 
- Static Protected Attributes inherited from RichAI
static readonly Color GizmoColorPath = new Color(8.0f/255, 78.0f/255, 194.0f/255)
 
- Properties inherited from RichAI
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 end of the path.
 
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 traversingOffMeshLink [get, set]
 
bool TraversingSpecial [get]
 
Vector3 Velocity [get]
 Current velocity of the agent.
 

Member Function Documentation

override void CalculatePathRequestEndpoints ( out Vector3  start,
out Vector3  end 
)
protectedvirtual

Outputs the start point and end point of the next automatic path request.

This is a separate method to make it easy for subclasses to swap out the endpoints of path requests. For example the #LocalSpaceRichAI script which requires the endpoints to be transformed to graph space first.

Reimplemented from AIBase.

void RefreshTransform ( )
private
override void Start ( )
protectedvirtual

Starts searching for paths.

If you override this method you should in most cases call base.Start () at the start of it.

See Also
Init

Reimplemented from AIBase.

override void Update ( )
protectedvirtual

Called every frame.

If no rigidbodies are used then all movement happens here.

Reimplemented from AIBase.

Member Data Documentation

Root of the object we are moving on.


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