【发布时间】:2017-09-28 23:03:40
【问题描述】:
我有一个关于 Lerp 的问题。所以我知道 lerp 可以帮助您移动对象,例如:
void update(){
transform.position = vector3.lerp(start.position,end.position, (Time.time / 1000));
}
这将使您的对象到达您的终点。 但是如果你有这个代码:
void Update(){
transform.position = Vector3.Lerp(transform.position,
destination.position,
speed * 3.0f * Time.deltaTime);
}
你的物体怎么可能到达你的目的地,lerp 的第三个参数必须慢慢地达到 1,这样你的物体才能到达你的目的地。但是 "speed" , "3.0" , "Time.deltaTime" 总是一样的,那么你的对象怎么可能到达你的目的地呢?
所以最大的问题是:是否可以对一些变量进行 lerp,这些变量始终具有相同的值并且使用 Time.deltaTime?
现在,由于不同的 cmets 等。我不知道 lerp 究竟是如何工作的,我有可能:
1.) 首先我认为它是这样工作的:
Vector3.lerp(a,b,c) c 值必须改变每一帧才能移动对象。如果 c 值为 0.2,您的对象将移动 20%,如果 c 值不改变,则对象将始终移动 20%。因此,要流畅地移动对象,您的 c 值必须在每一帧中稍微更改一下,这样您的 c 值将从 0 变为 1,您的对象从起点到终点也是如此。
还是这样
2.) 由于有几个 cmets,我认为 lerp 是这样工作的
就像 cmets 说的,c 值不必改变值,因为如果你有 c = 0.2,你将通过 20% 的方式和下一帧,如果 c 仍然是 0.2,你将通过 20%剩下的路等等。
那么 lerp 是像 1 一样工作(你必须更改 c)还是像 2 一样工作(你不必更改 c)
【问题讨论】:
-
请确保您的代码格式正确,突出显示并按下
{ }按钮,我已经为您修复了。 -
另外,您可能对Zeno's dichotomy paradox感兴趣
-
抱歉代码问题。我知道我可以如何使用 lerp,但我想知道我是否可以使用变量,这些变量总是具有相同的值和 Time.deltaTime,如果可以,如何使用?
-
这并不是说它有帮助,而是你所处的情况。假设
speed * 3.0f * Time.deltaTime评估为0.75,这意味着你将在每一帧中走完 75% 的路。第一帧你走 75%,下一帧你走剩下的 75%,下一帧你走剩下的 75%(这是芝诺悖论,你永远不会到达那里,你只走 75%方式),这会不断重复,直到 75% 的增幅小于float可以改变的最小变化。