最近看到一些代码,发现里面会这样写 Vector3.Lerp(x, y, Time.deltaTime)
,deltaTime 是此时距离上一次调用的时间,它并不是[0, 1],所以这个插值是什么意思呢?
其实,这是一个减速的线性插值,我举一个非常简单的例子。比如要让当前物体的位置从0,移动到100。
float currPosition = 0;
void Update() {
float currPosition = ...;
float targetPosition = Vector3.Lerp(currPosition, 100, Time.deltaTime);
// use target position to update
}
假设 Time.deltaTime
是 0.2,那么第一次调用后 0 -> 100 进度:0.2,差值为20,targetPosition = 20
下一次调用时,则是 20 -> 100,进度 0.2,差值是 $(100 - 20) * 0.2 = 16$,所以 targetPosition = 20 + 16 = 36
以此类推,可以看出,由于 deltaTime 是一个可以理解为恒定的数值,而起始数据和目标数值会随着迭代,起始数值不断靠近目标数值,这样每次步进的差值就会越来越小。
迭代 起始->目标 deltaTime 步进差值 当前迭代的结果
0: 0 -> 100, 0.2, 20, 20
1: 20 -> 100, 0.2, 16, 36
2: 36 -> 100, 0.2, 12.8, 48.8
3: 48.8 -> 100, 0.2, 10.2, 59
4: 59 -> 100, 0.2, 8.2, 67.2
5: ....
希望以上内容对你有帮助。