You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
895 B

5 years ago
  1. using UnityEngine;
  2. public class SplineWalker : MonoBehaviour {
  3. public BezierSpline spline;
  4. public float duration;
  5. public bool lookForward;
  6. public SplineWalkerMode mode;
  7. private float progress;
  8. private bool goingForward = true;
  9. private void Update () {
  10. if (goingForward) {
  11. progress += Time.deltaTime / duration;
  12. if (progress > 1f) {
  13. if (mode == SplineWalkerMode.Once) {
  14. progress = 1f;
  15. }
  16. else if (mode == SplineWalkerMode.Loop) {
  17. progress -= 1f;
  18. }
  19. else {
  20. progress = 2f - progress;
  21. goingForward = false;
  22. }
  23. }
  24. }
  25. else {
  26. progress -= Time.deltaTime / duration;
  27. if (progress < 0f) {
  28. progress = -progress;
  29. goingForward = true;
  30. }
  31. }
  32. Vector3 position = spline.GetPoint(progress);
  33. transform.localPosition = position;
  34. if (lookForward) {
  35. transform.LookAt(position + spline.GetDirection(progress));
  36. }
  37. }
  38. }