乐趣区

关于unity3d:Unity3D-Vector3Lerpx-y-TimedeltaTime-是什么意思

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

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

退出移动版