Перемещение игрового объекта сферы между 3 точками в цикле

#c# #unity3d

#c# #unity3d

Вопрос:

Я определяю три точки игрового объекта, в которых игровой объект сферы должен перемещаться из одной позиции в другую в цикле, так что 1-2-3-1-2-3 …. (как в треугольнике). Я могу добиться перемещения с помощью Vector3.MoveTowards() функции, но для этого требуется всего 2 точки. Есть ли способ добиться того же с несколькими точками? (по крайней мере, 3 или более)

 public class SlideBetweenPoints : MonoBehaviour
{
    public Transform pointA, pointB, pointC;
    public float speed;
 
     void Update ()
     {
        float step =  speed * Time.deltaTime; 
        transform.position = Vector3.MoveTowards(pointA.position , pointB.position , step);
 
     }
}
  

Ответ №1:

Да, просто двигайтесь к одной точке и, достигнув ее, переходите к следующей.

Обратите внимание, что в настоящее время вы всегда начинаете заново с pointA . Чтобы непрерывно двигаться к целевой позиции, вы должны скорее использовать

 transform.position = Vector3.MoveTowards(transform.position, targetPosition, step);
  

Я бы предпочел использовать более общий список, такой как

 public class SlideBetweenPoints : MonoBehaviour
{
    public List<Transform> points;
    public float speed;
 
    private int index;

     void Update ()
     { 
         transform.position = Vector3.MoveTowards(transform.position, points[index].position, speed * Time.deltaTime);
 
         if(transform.position == points[index].position)
         {
             // increase index with wrap around
             index = (index   1) % points.Count;
         }
     }
}
  

Где transform.position == points[index] используется точность 1e-5 для равенства. Если вам это действительно нужно, вы также можете проверить точное соответствие позиций:

  if(Mathf.Approximately(0, (transform.position- points[index].position).sqrMagnitude))
 {
     index = (index   1) % points.Count;
 }
  

Комментарии:

1. Огромное спасибо! Это идеально! Именно то, что я искал.