Интерполяция по нескольким точкам
Обычная линейная интерполяция, но вместо двух точек на входе массив из Vector3. Таким образом можно плавно двигать объект по множеству точек.
Ещё, можно передавать в функцию массив с продолжительностью каждого шага, если необходимо, чтобы объект двигался с разной скоростью от точки к точке.
Если же нужно, чтобы объект пробегал по всем точкам за заданное время, то функцию надо немного поменять и сначала посчитать расстояние между всеми точками.
public IEnumerator Move (Vector3[] positions, float time) {
for (int i = 0; i < positions.Length; i++) {
Vector3 startPosition = transform.position;
float t = 0f;
while (t < 1) {
t += Time.deltaTime / time;
transform.position = Vector3.Lerp (startPosition, positions[i], t);
yield return null;
}
transform.position = positions[i];
}
}
...
Vector3[] positionsArray = { new Vector3 (10f, 10f, 0f), new Vector3 (20f, 20f, 0f), ... };
StartCoroutine (positionsArray, 1f);
Это если не хочется из-за одной функции тянуть левую библиотеку в проект :) А так, DOTween решает наверно все задачи связанные с анимацией объекта.
Ну дело же не в том, чтобы сделать максимально оптимизированный лерп, а просто показать принцип :)) Можно ещё и трансформ закешировать и твои йелды использовать и ещё что-нибудь.
Так зачем показывать плохое, когда можно показать как нужно? :)
Супер страшного я тут ничего не вижу, а если это будет вызываться где-то один раз — так тем более. Это же пример. Преждевременная оптимизация — зло :)
Нет ничего более долго живущего, чем временное. (с) :)
С этим согласен :)