Функция Lerp дает точку между 2 векторами каждый раз, когда вы ее называете, так что, как и проблема с черепахой, она никогда не достигнет цели. Это будет становиться все медленнее и медленнее с каждым разом.
Вы можете устранить это поведение, установив постоянную скорость движения, но она будет выглядеть не так хорошо, как постепенное замедление, как при приближении.
Также вы можете устранить это поведение, остановив объект после того, как он подойдет слишком близко к объекту (так я обычно его использую)
Также обратите внимание, что если вы хотите анимировать что-то с помощью кода и хотите, чтобы оно было плавным, вы должны рассчитать его с помощью функции «Обновление».
Так что код может быть что-то вроде
void GoToTarget(){
var currpos = transform.position;
NewPos = new Vector3(- 10, currpos.y, currpos.z + 2);
traveling = true;
}
void Update () {
if (traveling){
rigidbody.MovePosition(Vector3.Lerp(transform.position, NewPos, Time.deltaTime* MoveSpeed));
if((transform.position-NewPos).magnitude < 0.1f){
//Current position is too close to Target, teleport to target and stop
transform.position = NewPos;
traveling = false;
}
}
}