Итак, во-первых, прочитайте этот пост, чтобы лучше понять функцию Lerp - https://chicounity3d.wordpress.com/2014/05/23/how-to-lerp-like-a-pro/ http://www.kinematicsoup.com/news/2016/8/9/rrypp5tkubynjwxhxjzd42s3o034o8
Теперь вы должны лучше понимать lerp.В итоге lerp делает действительно простую вещь.Скажем, у вас есть два значения X и Y. Для этого примера давайте дадим им какое-то значение, X = 0, Y = 1. Теперь вы хотите получить значение между ними в несколько процентов, как вы хотите получить значение, которое составляет 50%.из X и Y. Вы можете догадаться, что ответ 0,5.Уравнение lerp для этого будет
Mathf.Lerp(0, 1, 0.5f);
Итак, просто учитывая два значения, x и y, Mathf.Lerp возвращает значение, равное t процентам между ними.
Теперь для правильного использованияLerp вам нужно кэшировать позицию перед началом lerp.В большинстве случаев я использую сопрограмму, чтобы получить этот эффект работает довольно хорошо, а затем вы можете использовать кривую анимации, чтобы изменить третий параметр, чтобы создать сумасшедшие хорошие эффекты.Например, при использовании кривой анимации просто прокомментируйте, я напишу это.
Для этой вашей проблемы у вас есть два варианта -
1) Липп, как профессионал, использующий кривую анимации для управления скоростью.Помните, что вы также можете создавать анимационные кривые во время выполнения.
IENumerator Move(Transform toMove, Vector3 end, float duration){
Vector3 startPos = toMove.position;
float elapsed = 0f;
while(elapsed < duration){
elapsed += Time.deltaTime;
toMove.position = Vector3.Lerp(startPos, end, elapsed / duration);//manipulate the last parameter to move the object linearly
yield return null;//basically wait for next frame
}
toMove.position = end;//after lerp ends
}
Теперь вы можете вместо продолжительности использовать скорость, а затем с ее помощью вы рассчитываете требуемое время и изменяете скорость, чтобы сделать это быстрее
float distance = Vector3.Distance(startPos, end);
toMove.position = Vector3.Lerp(startPos, end, elapsed / (distance/(speed * multiplier)));
2) Используйте Vector3.MoveTowards -Эта функция перемещает точку в конечную точку с заданным максимальным шагом, требует трех параметров (currentPosition, end, step), вы можете умножить шаг на переменную для управления скоростью, оба работают очень хорошо.Использовать это намного проще в большинстве случаев. Пример -
float step = speed * Time.deltaTime;//to make it framerate independent
transform.position = Vector3.MoveTowards(transform.position, end, step * multiplier);
Надеюсь, это поможет.Мне жаль, что я не смог правильно отформатировать свой ответ, надеюсь, мне будет легче ответить.Любые изменения для улучшения ответа приветствуются:)