A* Pathfinding Project
4.3.5
The A* Pathfinding Project for Unity 3D
|
RichAI for local space (pathfinding on moving graphs). More...
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.
Public Attributes | |
LocalSpaceGraph | graph |
Root of the object we are moving on. More... | |
Public Attributes inherited from RichAI | |
float | acceleration = 5 |
Max acceleration of the agent. More... | |
bool | funnelSimplification = false |
Use funnel simplification. More... | |
System.Func< RichSpecial, IEnumerator > | onTraverseOffMeshLink |
Called when the agent starts to traverse an off-mesh link. More... | |
float | rotationSpeed = 360 |
Max rotation speed of the agent. More... | |
float | slowdownTime = 0.5f |
How long before reaching the end of the path to start to slow down. More... | |
bool | slowWhenNotFacingTarget = true |
Slow down when not facing the target direction. More... | |
float | wallDist = 1 |
Walls within this range will be used for avoidance. More... | |
float | wallForce = 3 |
Force to avoid walls with. More... | |
Public Attributes inherited from AIBase | |
bool | canMove = true |
Enables or disables movement completely. More... | |
bool | canSearch = true |
Enables or disables recalculating the path at regular intervals. More... | |
bool | enableRotation = true |
If true, the AI will rotate to face the movement direction. More... | |
float | endReachedDistance = 0.2f |
Distance to the end point to consider the end of path to be reached. More... | |
Vector3 | gravity = new Vector3(float.NaN, float.NaN, float.NaN) |
Gravity to use. More... | |
LayerMask | groundMask = -1 |
Layer mask to use for ground placement. More... | |
float | height = 2 |
Radius of the agent in world units. More... | |
float | maxSpeed = 1 |
Max speed in world units per second. More... | |
IMovementPlane | movementPlane = GraphTransform.identityTransform |
Plane which this agent is moving in. More... | |
OrientationMode | orientation = OrientationMode.ZAxisForward |
Determines which direction the agent moves in. More... | |
float | radius = 0.5f |
Height of the agent in world units. More... | |
float | repathRate = 0.5f |
Determines how often the agent will search for new paths (in seconds). More... | |
RVODestinationCrowdedBehavior | rvoDensityBehavior = new RVODestinationCrowdedBehavior(true, 0.5f, false) |
Controls if the agent slows down to a stop if the area around the destination is crowded. More... | |
bool | updatePosition = true |
Determines if the character's position should be coupled to the Transform's position. More... | |
bool | updateRotation = true |
Determines if the character's rotation should be coupled to the Transform's rotation. More... | |
CloseToDestinationMode | whenCloseToDestination = CloseToDestinationMode.Stop |
What to do when within endReachedDistance units from the destination. More... | |
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. More... | |
override void | OnUpdate (float dt) |
Called every frame. More... | |
override void | Start () |
Starts searching for paths. More... | |
Protected Member Functions inherited from RichAI | |
override Vector3 | ClampToNavmesh (Vector3 position, out bool positionChanged) |
Constrains the character's position to lie on the navmesh. More... | |
override void | ClearPath () |
Clears the current path of the agent. More... | |
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. More... | |
void | NextPart () |
Declare that the AI has completely traversed the current part. More... | |
override void | OnDisable () |
Called when the component is disabled. More... | |
override void | OnDrawGizmos () |
override void | OnPathComplete (Path p) |
Called when a requested path has been calculated. More... | |
virtual void | OnTargetReached () |
Called when the end of the path is reached. More... | |
override int | OnUpgradeSerializedData (int version, bool unityThread) |
Handle serialization backwards compatibility. More... | |
IEnumerator | TraverseOffMeshLinkFallback (RichSpecial link) |
Fallback for traversing off-mesh links in case onTraverseOffMeshLink is not set. More... | |
virtual IEnumerator | TraverseSpecial (RichSpecial link) |
Traverses an off-mesh link. More... | |
virtual Vector3 | UpdateTarget (RichFunnel fn) |
Protected Member Functions inherited from AIBase | |
void | ApplyGravity (float deltaTime) |
Accelerates the agent downwards. More... | |
Vector2 | CalculateDeltaToMoveThisFrame (Vector2 position, float distanceToEndOfPath, float deltaTime) |
Calculates how far to move during a single frame. More... | |
void | CancelCurrentPathRequest () |
virtual void | OnDrawGizmosSelected () |
virtual void | OnEnable () |
Called when the component is enabled. More... | |
Vector3 | RaycastPosition (Vector3 position, float lastElevation) |
Checks if the character is grounded and prevents ground penetration. More... | |
override void | Reset () |
Handle serialization backwards compatibility. More... | |
Quaternion | SimulateRotationTowards (Vector2 direction, float maxDegrees) |
Simulates rotating the agent towards the specified direction and returns the new rotation. More... | |
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 | SearchPath () |
Recalculate the current path. More... | |
override void | Teleport (Vector3 newPosition, bool clearPath=true) |
Instantly move the agent to a new position. More... | |
void | UpdatePath () |
Force recalculation of the current path. More... | |
Public Member Functions inherited from AIBase | |
virtual void | FinalizeMovement (Vector3 nextPosition, Quaternion nextRotation) |
Moves the agent to a position. More... | |
virtual void | FindComponents () |
Looks for any attached components like RVOController and CharacterController etc. More... | |
virtual Vector3 | GetFeetPosition () |
Position of the base of the character. More... | |
virtual void | Move (Vector3 deltaPosition) |
Move the agent. More... | |
void | MovementUpdate (float deltaTime, out Vector3 nextPosition, out Quaternion nextRotation) |
Calculate how the character wants to move during this frame. More... | |
void | SetPath (Path path) |
Make the AI follow the specified path. More... | |
Quaternion | SimulateRotationTowards (Vector3 direction, float maxDegrees) |
Simulates rotating the agent towards the specified direction and returns the new rotation. More... | |
Public Member Functions inherited from IAstarAI | |
void | FinalizeMovement (Vector3 nextPosition, Quaternion nextRotation) |
Move the agent. More... | |
void | Move (Vector3 deltaPosition) |
Move the agent. More... | |
void | MovementUpdate (float deltaTime, out Vector3 nextPosition, out Quaternion nextRotation) |
Calculate how the character wants to move during this frame. More... | |
void | SetPath (Path path) |
Make the AI follow the specified path. More... | |
Static Public Attributes inherited from AIBase | |
static readonly Color | ShapeGizmoColor = new Color(240/255f, 213/255f, 30/255f) |
Protected Attributes inherited from RichAI | |
bool | delayUpdatePath |
float | distanceToSteeringTarget = float.PositiveInfinity |
Distance to steeringTarget in the movement plane. More... | |
bool | lastCorner |
readonly List< Vector3 > | nextCorners = new List<Vector3>() |
readonly RichPath | richPath = new RichPath() |
Holds the current path that this agent is following. More... | |
readonly List< Vector3 > | wallBuffer = new List<Vector3>() |
Protected Attributes inherited from AIBase | |
CharacterController | controller |
Cached CharacterController component. More... | |
Vector2 | lastDeltaPosition |
Amount which the character wants or tried to move with during the last frame. More... | |
float | lastDeltaTime |
Delta time used for movement during the last frame. More... | |
float | lastRepath = float.NegativeInfinity |
Time when the last path request was started. More... | |
int | prevFrame |
Last frame index when prevPosition1 was updated. More... | |
Vector3 | prevPosition1 |
Position of the character at the end of the last frame. More... | |
Vector3 | prevPosition2 |
Position of the character at the end of the frame before the last frame. More... | |
Rigidbody | rigid |
Cached Rigidbody component. More... | |
Rigidbody2D | rigid2D |
Cached Rigidbody component. More... | |
RVOController | rvoController |
Cached RVOController component. More... | |
Seeker | seeker |
Cached Seeker component. More... | |
Vector3 | simulatedPosition |
Position of the agent. More... | |
Quaternion | simulatedRotation |
Rotation of the agent. More... | |
Transform | tr |
Cached Transform component. More... | |
Vector2 | velocity2D |
Current desired velocity of the agent (does not include local avoidance and physics). More... | |
float | verticalVelocity |
Velocity due to gravity. More... | |
bool | waitingForPathCalculation = false |
Only when the previous path has been calculated should the script consider searching for a new path. More... | |
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. More... | |
bool | ApproachingPartEndpoint [get] |
bool | approachingPartEndpoint [get] |
True if approaching the last waypoint in the current part of the path. More... | |
bool | ApproachingPathEndpoint [get] |
bool | approachingPathEndpoint [get] |
True if approaching the last waypoint of all parts in the current path. More... | |
bool IAstarAI. | canMove [get, set] |
Enables or disables movement completely. More... | |
bool IAstarAI. | canSearch [get, set] |
Enables or disables recalculating the path at regular intervals. More... | |
float | DistanceToNextWaypoint [get] |
bool | hasPath [get] |
True if this agent currently has a path that it follows. More... | |
float IAstarAI. | height [get, set] |
Radius of the agent in world units. More... | |
float IAstarAI. | maxSpeed [get, set] |
Max speed in world units per second. More... | |
Vector3 | NextWaypoint [get] |
Waypoint that the agent is moving towards. More... | |
bool | PathPending [get] |
True if a path to the target is currently being calculated. More... | |
bool | pathPending [get] |
True if a path is currently being calculated. More... | |
float IAstarAI. | radius [get, set] |
Height of the agent in world units. More... | |
override bool | reachedDestination [get] |
True if the ai has reached the destination. More... | |
bool | reachedEndOfPath [get] |
True if the agent has reached the end of the current path. More... | |
float | remainingDistance [get] |
Remaining distance along the current path to the end of the path. More... | |
bool | repeatedlySearchPaths [get, set] |
Search for new paths repeatedly. More... | |
override bool | shouldRecalculatePath [get] |
Vector3 | steeringTarget [get, protected set] |
Point on the path which the agent is currently moving towards. More... | |
Vector3 | TargetPoint [get] |
Current waypoint that the agent is moving towards. More... | |
bool | TargetReached [get] |
True if the end of the path has been reached. More... | |
bool | traversingOffMeshLink [get, protected set] |
bool | TraversingSpecial [get] |
Vector3 | Velocity [get] |
Current velocity of the agent. More... | |
Properties inherited from AIBase | |
float | centerOffset [get, set] |
Offset along the Y coordinate for the ground raycast start position. More... | |
Vector3 | desiredVelocity [get] |
Velocity that this agent wants to move with. More... | |
Vector3 | destination [get, set] |
Position in the world that this agent should move to. More... | |
bool | isStopped [get, set] |
Gets or sets if the agent should stop moving. More... | |
System.Action | onSearchPath [get, set] |
Called when the agent recalculates its path. More... | |
Vector3 | position [get] |
Position of the agent. More... | |
abstract bool | reachedDestination [get] |
True if the ai has reached the destination. More... | |
Quaternion | rotation [get] |
Rotation of the agent. More... | |
bool | rotationIn2D [get, set] |
If true, the forward axis of the character will be along the Y axis instead of the Z axis. More... | |
virtual bool | shouldRecalculatePath [get] |
True if the path should be automatically recalculated as soon as possible. More... | |
Transform | target [get, set] |
Target to move towards. More... | |
bool | usingGravity [get, set] |
Indicates if gravity is used during this frame. More... | |
Vector3 | velocity [get] |
Actual velocity that the agent is moving with. More... | |
Properties inherited from VersionedMonoBehaviour | |
int Util.IEntityIndex. | EntityIndex [get, set] |
Internal entity index used by #BurstBatchHelper. More... | |
Properties inherited from IEntityIndex | |
int | EntityIndex [get, set] |
Properties inherited from IAstarAI | |
bool | canMove [get, set] |
Enables or disables movement completely. More... | |
bool | canSearch [get, set] |
Enables or disables recalculating the path at regular intervals. More... | |
Vector3 | desiredVelocity [get] |
Velocity that this agent wants to move with. More... | |
Vector3 | destination [get, set] |
Position in the world that this agent should move to. More... | |
bool | hasPath [get] |
True if this agent currently has a path that it follows. More... | |
float | height [get, set] |
Radius of the agent in world units. More... | |
bool | isStopped [get, set] |
Gets or sets if the agent should stop moving. More... | |
float | maxSpeed [get, set] |
Max speed in world units per second. More... | |
System.Action | onSearchPath [get, set] |
Called when the agent recalculates its path. More... | |
bool | pathPending [get] |
True if a path is currently being calculated. More... | |
Vector3 | position [get] |
Position of the agent. More... | |
float | radius [get, set] |
Height of the agent in world units. More... | |
bool | reachedDestination [get] |
True if the ai has reached the destination. More... | |
bool | reachedEndOfPath [get] |
True if the agent has reached the end of the current path. More... | |
float | remainingDistance [get] |
Remaining distance along the current path to the end of the path. More... | |
Quaternion | rotation [get] |
Rotation of the agent. More... | |
Vector3 | steeringTarget [get] |
Point on the path which the agent is currently moving towards. More... | |
Vector3 | velocity [get] |
Actual velocity that the agent is moving with. More... | |
|
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.
|
protectedvirtual |
Called every frame.
Reimplemented from AIBase.
|
private |
|
protectedvirtual |
LocalSpaceGraph graph |
Root of the object we are moving on.