Advertisement
AlexG2230954

Занятие 6. Движение между точками

Jul 25th, 2022
1,041
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.77 KB | None | 0 0
  1. /*
  2.     Движение кубика от одной точки до другой и обратно
  3. */
  4.  
  5. using UnityEngine;
  6.  
  7.  
  8. public class PointLineMove : MonoBehaviour
  9. {
  10.     public Transform startPoint; // компонент Transform начальной точки
  11.     public Transform endPoint; // компонент Transform конечной точки
  12.     public float speed; // скорость передвижения кубика
  13.     public float nextPointDistance; // минимальное расстояние между кубиком и точкой, чтобы начать двигаться в противоположно направлении
  14.  
  15.     private string moveState = "FRONT"; // показывает направление, в котором двигается кубик
  16.     private Transform transformComponent; // компонент Transform движущегося кубика
  17.     private Vector3 moveDirection; // направление движения кубика
  18.  
  19.     void Start()
  20.     {
  21.         transformComponent = GetComponent<Transform>();
  22.    
  23.         // вычисляем направление, в котором должен двигаться кубик
  24.         moveDirection = endPoint.position - startPoint.position; // вектор, начало которого - начальная точка, а конец - конечная точка
  25.         moveDirection = moveDirection.normalized; // делаем так, чтобы его длина была 1, чтобы не мучаться со скоростью передвижения (можно рассказать про умножение вектора на число)
  26.  
  27.         transformComponent.position = startPoint.position; // устанавливаем кубик в начальное положение
  28.     }
  29.  
  30.     void Update()
  31.     {
  32.         if(moveState == "FRONT")
  33.         {
  34.             transformComponent.position += moveDirection * speed;
  35.  
  36.             // если расстояние от кубика до конечной точки меньше минимального, то двигаемся обратно
  37.             if(Vector3.Distance(transformComponent.position, endPoint.position) < nextPointDistance)
  38.             {
  39.                 moveState = "BACK";
  40.             }
  41.         }
  42.  
  43.         if(moveState == "BACK")
  44.         {
  45.             transformComponent.position -= moveDirection * speed;
  46.  
  47.             // если расстояние от кубика до начальной точки меньше минимального, то двигаемся вперед
  48.             if(Vector3.Distance(transformComponent.position, startPoint.position) < nextPointDistance)
  49.             {
  50.                 moveState = "FRONT";
  51.             }
  52.         }
  53.     }
  54. }
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement