#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. Огромное спасибо! Это идеально! Именно то, что я искал.