Плавное перемещение объекта в позицию endPosition за время duration.
Вызывается: StartCoroutine(Lerp(endPosition, duration));
Своими словами: Vector3.Lerp(p1, p2, p3) принимает «расстояние» между p1 и p2 за единицу, а p3 (значение от 0 до 1) — сколько вернуть из этого «расстояния». Если p3 = 0, возвращает p1, если p3 = 1, возвращает p2, если p3 = 0.5 — половину, или (p1+p2)/2 и т.д.
Поскольку в этом примере p3 никогда не будет равен 1 (из-за timeElapsed < duration), в конце добавляется присваивание endPosition.
private IEnumerator Lerp(Vector3 endPosition, float duration) { Vector3 startPosition = transform.position; float timeElapsed = 0; while (timeElapsed < duration) { transform.position = Vector3.Lerp(startPosition, endPosition, timeElapsed / duration); timeElapsed += Time.deltaTime; yield return null; } transform.position = endPosition; }