38 lines
1.4 KiB
C#
38 lines
1.4 KiB
C#
|
using UnityEngine;
|
|||
|
|
|||
|
namespace PathCreation.Examples
|
|||
|
{
|
|||
|
// Moves along a path at constant speed.
|
|||
|
// Depending on the end of path instruction, will either loop, reverse, or stop at the end of the path.
|
|||
|
public class PathFollower : MonoBehaviour
|
|||
|
{
|
|||
|
public PathCreator pathCreator;
|
|||
|
public EndOfPathInstruction endOfPathInstruction;
|
|||
|
public float speed = 5;
|
|||
|
float distanceTravelled;
|
|||
|
|
|||
|
void Start() {
|
|||
|
if (pathCreator != null)
|
|||
|
{
|
|||
|
// Subscribed to the pathUpdated event so that we're notified if the path changes during the game
|
|||
|
pathCreator.pathUpdated += OnPathChanged;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void Update()
|
|||
|
{
|
|||
|
if (pathCreator != null)
|
|||
|
{
|
|||
|
distanceTravelled += speed * Time.deltaTime;
|
|||
|
transform.position = pathCreator.path.GetPointAtDistance(distanceTravelled, endOfPathInstruction);
|
|||
|
transform.rotation = pathCreator.path.GetRotationAtDistance(distanceTravelled, endOfPathInstruction);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// If the path changes during the game, update the distance travelled so that the follower's position on the new path
|
|||
|
// is as close as possible to its position on the old path
|
|||
|
void OnPathChanged() {
|
|||
|
distanceTravelled = pathCreator.path.GetClosestDistanceAlongPath(transform.position);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|