A* Pathfinding Project
3.8.12
The A* Pathfinding Project for Unity 3D
|
Linearly interpolating movement script. More...
Linearly interpolating movement script.
This movement script will follow the path exactly, it uses linear interpolation to move between the waypoints in the path. This is desirable for some types of games. It also works in 2D.
Recommended setup:
This depends on what type of movement you are aiming for. If you are aiming for movement where the unit follows the path exactly (you are likely using a grid or point graph) the default settings on this component should work quite well, however I recommend that you adjust the StartEndModifier on the Seeker component: set the 'Exact Start Point' field to 'NodeConnection' and the 'Exact End Point' field to 'SnapToNode'.
If you on the other hand want smoother movement I recommend adding the Simple Smooth Modifier to the GameObject as well. You may also want to tweak the rotationSpeed.
Public Member Functions | |
virtual void | ForceSearchPath () |
Requests a path to the target. | |
virtual Vector3 | GetFeetPosition () |
void | OnDisable () |
virtual void | OnPathComplete (Path _p) |
Called when a requested path has finished calculation. | |
virtual void | OnTargetReached () |
The end of the path has been reached. | |
virtual void | SearchPath () |
Requests a path to the target. | |
float | TrySearchPath () |
Tries to search for a path. | |
Public Attributes | |
bool | canMove = true |
Enables or disables movement. | |
bool | canSearch = true |
Enables or disables searching for paths. | |
bool | enableRotation = true |
If true, the AI will rotate to face the movement direction. | |
bool | interpolatePathSwitches = true |
If true, some interpolation will be done when a new path has been calculated. | |
float | repathRate = 0.5F |
Determines how often it will search for new paths. | |
bool | rotationIn2D = false |
If true, rotation will only be done along the Z axis. | |
float | rotationSpeed = 10 |
How quickly to rotate. | |
float | speed = 3 |
Speed in world units. | |
float | switchPathInterpolationSpeed = 5 |
How quickly to interpolate to the new path. | |
Transform | target |
Target to move towards. | |
Protected Member Functions | |
virtual void | Awake () |
Initializes reference variables. | |
virtual Vector3 | CalculateNextPosition (out Vector3 direction) |
Calculate the AI's next position (one frame in the future). | |
virtual void | ConfigureNewPath () |
Finds the closest point on the current path. | |
virtual void | ConfigurePathSwitchInterpolation () |
virtual void | OnEnable () |
Run at start and when reenabled. | |
IEnumerator | RepeatTrySearchPath () |
Tries to search for a path every repathRate seconds. | |
virtual void | Start () |
Starts searching for paths. | |
virtual void | Update () |
Protected Attributes | |
bool | canSearchAgain = true |
Only when the previous path has been returned should be search for a new path. | |
int | currentWaypointIndex = 0 |
Current index in the path which is current target. | |
float | distanceAlongSegment = 0 |
How far the AI has moved along the current segment. | |
float | lastRepath = -9999 |
Time when the last path request was sent. | |
ABPath | path |
Current path which is followed. | |
Vector3 | previousMovementDirection |
Vector3 | previousMovementOrigin |
When a new path was returned, the AI was moving along this ray. | |
float | previousMovementStartTime = -9999 |
Seeker | seeker |
Cached Seeker component. | |
Transform | tr |
Cached Transform component. | |
Properties | |
bool | targetReached [get, set] |
True if the end-of-path is reached. | |
Private Attributes | |
bool | startHasRun = false |
Holds if the Start function has been run. | |
|
protectedvirtual |
Initializes reference variables.
If you override this function you should in most cases call base.Awake () at the start of it.
|
protectedvirtual |
Calculate the AI's next position (one frame in the future).
direction | The direction of the segment the AI is currently traversing. Not normalized. |
|
protectedvirtual |
Finds the closest point on the current path.
Sets currentWaypointIndex and #lerpTime to the appropriate values.
|
protectedvirtual |
|
virtual |
Requests a path to the target.
Bypasses 'is-it-a-good-time-to-request-a-path' checks.
|
virtual |
void OnDisable | ( | ) |
|
protectedvirtual |
|
virtual |
Called when a requested path has finished calculation.
A path is first requested by SearchPath, it is then calculated, probably in the same or the next frame. Finally it is returned to the seeker which forwards it to this function.
|
virtual |
The end of the path has been reached.
If you want custom logic for when the AI has reached it's destination add it here You can also create a new script which inherits from this one and override the function in that script.
|
protected |
Tries to search for a path every repathRate seconds.
|
virtual |
Requests a path to the target.
Some inheriting classes will prevent the path from being requested immediately when this function is called, for example when the AI is currently traversing a special path segment in which case it is usually a bad idea to search for a new path.
|
protectedvirtual |
Starts searching for paths.
If you override this function you should in most cases call base.Start () at the start of it.
float TrySearchPath | ( | ) |
Tries to search for a path.
Will search for a new path if there was a sufficient time since the last repath and both canSearchAgain and canSearch are true and there is a target.
|
protectedvirtual |
bool canMove = true |
Enables or disables movement.
bool canSearch = true |
Enables or disables searching for paths.
Setting this to false does not stop any active path requests from being calculated or stop it from continuing to follow the current path.
|
protected |
Only when the previous path has been returned should be search for a new path.
|
protected |
Current index in the path which is current target.
|
protected |
How far the AI has moved along the current segment.
bool enableRotation = true |
If true, the AI will rotate to face the movement direction.
bool interpolatePathSwitches = true |
If true, some interpolation will be done when a new path has been calculated.
This is used to avoid short distance teleportation.
|
protected |
Time when the last path request was sent.
|
protected |
Current path which is followed.
|
protected |
|
protected |
When a new path was returned, the AI was moving along this ray.
Used to smoothly interpolate between the previous movement and the movement along the new path. The speed is equal to movement direction.
|
protected |
float repathRate = 0.5F |
Determines how often it will search for new paths.
If you have fast moving targets or AIs, you might want to set it to a lower value. The value is in seconds between path requests.
bool rotationIn2D = false |
If true, rotation will only be done along the Z axis.
float rotationSpeed = 10 |
How quickly to rotate.
float speed = 3 |
Speed in world units.
|
private |
Holds if the Start function has been run.
Used to test if coroutines should be started in OnEnable to prevent calculating paths in the awake stage (or rather before start on frame 0).
float switchPathInterpolationSpeed = 5 |
How quickly to interpolate to the new path.
Transform target |
Target to move towards.
The AI will try to follow/move towards this target. It can be a point on the ground where the player has clicked in an RTS for example, or it can be the player object in a zombie game.
|
protected |
Cached Transform component.
|
getset |
True if the end-of-path is reached.