Плавное передвижение в Unity3D через Mathf.Lerp или что такое интерполяция

В ходе решения проблем с камерой изучил интересную функцию Mathf.Lerp. Википедия по этому поводу говорит так:

Интерполя́ция, интерполи́рование — в вычислительной математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.

Я-же скажу проще — это способ растянуть по времени какое-то ваше действие — то ли перемещение к точке, то ли поворот.

Но есть один немаловажный момент. Нельзя просто написать

transform.position = Vector3(Mathf.Lerp(0, 50, 5*Time.TimeDelta), 0, 0);

Такой код не переместит объект в позицию (50, 0, 0), а сделает только один шаг по этому перемещению.

Поэтому Lerp нужно вызывать до тех пор, пока цель не будет достигнута, или просто заданное время.

Обычно интерполяцию используют в функции Update():

void Update(){
if(transform.position!=Vector3(50, 0, 0)) {
transform.position = Vector3(Mathf.Lerp(0, 50, 5*Time.TimeDelta), 0, 0);
}

Т.е. интерполяцию нужно вызывать до тех пор, пока объект не займёт предназначенное для него место, а не один раз.

Более подробно можно почитать в разделах справки Unity3D Mathf.Lerp, Vector3.Lerp (перемещение) и Quaternion.Lerp вращение.

Удачной интерполяции вам в пространстве ! =)