void Update() { DisplayInView(); if (!isFollowingPath) { return; } if (idleAtEachPoint) { if (!isStopped) { Vector3 tangent; MovePosition(curveMath.CalcPositionAndTangentByDistance(distanceDone, out tangent)); LerpRotation(QuaternionExtensions.LookRotation(tangent)); float currentDistanceDone = Time.deltaTime * movementSpeed; if (pointToPointDistanceDone + currentDistanceDone >= distanceToDo) { float pointToPointDistanceDoneBefore = pointToPointDistanceDone; pointToPointDistanceDone = distanceToDo; distanceDone += pointToPointDistanceDone - pointToPointDistanceDoneBefore; } else { distanceDone += currentDistanceDone; pointToPointDistanceDone += currentDistanceDone; } if (pointToPointDistanceDone >= distanceToDo) { isStopped = true; CurrentState = PathFollowerState.IDLE; UpdatePointIndexAndDistanceToDo(); currentIdleTween = DOVirtual.DelayedCall(idleTime, () => { CurrentState = PathFollowerState.MOVING; isStopped = false; currentIdleTween = null; }); } if (loop) { distanceDone %= distanceTotal; } } } else { Vector3 tangent; MovePosition(curveMath.CalcPositionAndTangentByDistance(distanceDone, out tangent)); LerpRotation(QuaternionExtensions.LookRotation(tangent)); distanceDone += Time.deltaTime * movementSpeed; if (loop) { distanceDone %= distanceTotal; } } }
public void Stop() { isFollowingPath = false; CurrentState = PathFollowerState.STOPPED; if (currentIdleTween != null) { currentIdleTween.Pause(); } }
public void Begin() { isFollowingPath = true; if (idleAtEachPoint) { CurrentState = PathFollowerState.MOVING; if (currentIdleTween != null) { currentIdleTween.Play(); } } else { CurrentState = PathFollowerState.MOVING; } }