Lerp使用误区
我注意到,无论是Mathf.Lerp还是Vector的Lerp函数,都有不少将线性移动用于弹性移动的严重错误。 (总之自己还不知道,还很奇怪,咦,不是说了很好的线性移动吗? 怎么有点弹性的着急? 和,最常见的错误写法如下:
transform.position=vector3. lerp (transform.position,target.position,0.1f );
错误的关键在于无法理解lerp (向量3 a、向量3 b、浮动t的第三个参数t。 该t取值范围[ 0,1 ],0时返回a,1时返回b,0.5时返回a和b的中点位置。 也就是说,如果该值的变化像上述决定返回的代码那样错误地使用t,例如时间和速度,则每次移动时,其馀位置的1/10。 例如,如果第一个距离为1米,则变化的位置依次为0.1、0.10.09、0.190.081、……。
transform.position=vector3. lerp (a,b,0.1f );
这是另一个常见的错误,这种写法永远停留在a和b之间的1/10的位置。
我们应该通过控制t的变化来控制位置的变化。 例如,如果想从a到b总共花2s的时间,正确的使用方法应该写如下。
浮动步骤=1f/2f * time.delta time;
t=步骤;
transform.position=vector3. lerp (a,b,t );
2. SmoothDamp使用问题
SmoothDamp的使用问题主要是需要引用传递的参数ref Vector3currentVelocity。 此参数必须是全局变量,而不是局部变量。 否则,你会发现物体以乌龟一样的速度移动。 每次调用此变量时,它都将在SmoothDamp内部使用和修改,因此必须记录在上一个值中
Vector3 velocity=Vector3.zero;
void更新() )
{
transform.position=vector3. smooth damp (transform.position,target,ref velocity,smoothTime );
}