最近看到一些代码,发现外面会这样写 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: ....
心愿以上内容对你有帮忙。