最近看到一些代码,发现里面会这样写 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:    ....

希望以上内容对你有帮助。

03-05 20:31