Найти в Дзене
Unity, игры, уроки

Интерполяция по нескольким точкам

Обычная линейная интерполяция, но вместо двух точек на входе массив из 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 решает наверно все задачи связанные с анимацией объекта.

__________________________________________________________________________________________

Все последние обновления этой и других статей, вы можете найти у меня в блоге https://mopsicus.ru

Подписывайтесь, чтобы не пропустить что-то интересное