最近看到一些代码,发现外面会这样写 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,       201:    20 -> 100,   0.2,       16,       362:    36 -> 100,   0.2,       12.8,     48.83:    48.8 -> 100, 0.2,       10.2,     594:    59 -> 100,   0.2,       8.2,      67.25:    ....

心愿以上内容对你有帮忙。