在Unity中Lerp的定义如下:
public static Vector3 Lerp(Vector3 a, Vector3 b, float t);
t是一个介于[0, 1]之间的一个值,a与b的差的比例所表示的向量,如果t=0,那么返回a,如果t=1,那么返回b,如果t为其他值那么就返回a与b中间某个比例的向量。
了解了这个以后,就可以解决如何平滑地来移动镜头的问题了。如果要平滑的移动镜头,那么镜头一定不能一下子从当前位置(from)移动到目的位置(to)。而且,当to和from的差值越大,镜头应当移动的更快,这样才会有平滑移动的效果。
通过Vector.Lerp(from, to, t);即可解决这样的问题,to是目标位置,而from是当前位置,当在Unity中每次更新(FixedUpdate)的时候,from会进行更新(为了简化理解的过程,可以假设to一直不变),所以每次更新的时候,from都会更靠近to,但随着from更靠近to,from和to之间的距离也会更近,那么下一次的时候,from向to的移动距离就会减少一点,这样就会有平滑的效果。
举个更直观一点的例子吧。
假设最开始to是0,from是16,t为0.5 。那么第一次更新后from为8,第二次为4,第三次为2……总之离to越近移动就越慢。
网友评论