A* Pathfinding Project
4.0.0
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 Member Functions | |
override void | UpdatePath () |
Force recalculation of the current path. | |
Public Member Functions inherited from RichAI | |
void | Teleport (Vector3 newPosition) |
Instantly moves the agent to the target position. | |
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. | |
Animation | anim |
float | centerOffset = 1 |
Offset along the Y coordinate for the ground raycast start position. | |
float | endReachedDistance = 0.01f |
Max distance to the endpoint to consider it reached. | |
bool | funnelSimplification = false |
Use funnel simplification. | |
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 of the agent. | |
bool | raycastingForGroundPlacement = true |
Raycast for ground placement (when not having a CharacterController). | |
float | repathRate = 0.5f |
Delay (seconds) between path searches. | |
bool | repeatedlySearchPaths = false |
Search for new paths repeatedly. | |
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. | |
Transform | target |
Target position to move to. | |
float | wallDist = 1 |
Walls within this range will be used for avoidance. | |
float | wallForce = 3 |
Force to avoid walls with. | |
Protected Member Functions | |
override void | Start () |
Starts searching for paths. | |
override void | Update () |
Update is called once per frame. | |
Protected Member Functions inherited from RichAI | |
override void | Awake () |
void | CancelCurrentPathRequest () |
void | NextPart () |
Declare that the AI has completely traversed the current part. | |
virtual void | OnDisable () |
Called when the component is disabled. | |
virtual void | OnDrawGizmos () |
virtual void | OnEnable () |
Called when the component is enabled. | |
virtual void | OnTargetReached () |
Called when the end of the path is reached. | |
virtual IEnumerator | TraverseSpecial (RichSpecial rs) |
virtual Vector3 | UpdateTarget (RichFunnel fn) |
Protected Member Functions inherited from VersionedMonoBehaviour | |
virtual int | OnUpgradeSerializedData (int version) |
Handle serialization backwards compatibility. | |
Private Member Functions | |
void | RefreshTransform () |
Additional Inherited Members | |
Protected Attributes inherited from RichAI | |
bool | canSearchPath |
CharacterController | controller |
Cached CharacterController component. | |
bool | delayUpdatePath |
float | distanceToWaypoint = float.PositiveInfinity |
bool | lastCorner |
float | lastRepath = float.NegativeInfinity |
IMovementPlane | movementPlane = GraphTransform.identityTransform |
List< Vector3 > | nextCorners = new List<Vector3>() |
Vector3 | prevPosition |
Position of the agent at the end of the previous frame. | |
Vector3 | realVelocity |
Current velocity of the agent. | |
readonly RichPath | rp = new RichPath() |
Holds the current path that this agent is following. | |
RVOController | rvoController |
Cached RVOController component. | |
Seeker | seeker |
Cached Seeker component. | |
Transform | tr |
Cached Transform component. | |
bool | traversingSpecialPath |
bool | waitingForPathCalc |
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) |
static readonly Color | GizmoColorRaycast = new Color(118.0f/255, 206.0f/255, 112.0f/255) |
Properties inherited from RichAI | |
bool | ApproachingPartEndpoint [get] |
True if approaching the last waypoint in the current part of the path. | |
bool | ApproachingPathEndpoint [get] |
True if approaching the last waypoint of all parts in the current path. | |
float | DistanceToNextWaypoint [get] |
Distance to the next waypoint. | |
Vector3 | NextWaypoint [get] |
Waypoint that the agent is moving towards. | |
bool | PathPending [get] |
True if a path to the target is currently being calculated. | |
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 | TraversingSpecial [get] |
Vector3 | Velocity [get] |
Current velocity of the agent. | |
|
private |
|
protectedvirtual |
Starts searching for paths.
If you override this function you should in most cases call base.Start () at the start of it.
Reimplemented from RichAI.
|
protectedvirtual |
Update is called once per frame.
Reimplemented from RichAI.
|
virtual |
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).
Reimplemented from RichAI.
LocalSpaceGraph graph |
Root of the object we are moving on.