我有一个关于勒普的问题。因此,我知道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,这样你的对象才能到达你的目的地。但是“速度”,"3.0“,"Time.deltaTime”总是一样的,那么你的对象怎么可能到达你的目的地呢?
所以最大的问题是:有没有可能用一些始终具有相同值的变量和Time.deltaTime来执行lerp?
现在,由于不同的评论等,我不知道lerp是如何工作的,我不得不考虑以下可能性:
1.)首先,我认为它是这样工作的:
向量3.lerp(a,b,c) c值必须改变每一帧以移动对象。如果c值是0.2,你的对象将移动20%,如果c值不变,对象将始终在20%的路径上。所以要让物体流畅地移动,你的c值必须每一帧都有一点变化,所以你的c值会从0到1,所以你的对象从起点到目的地。
或者是这样的?
2.)因为有几条评论,我认为lerp是这样工作的
就像注释说的那样,c值不必改变值,因为如果c= 0.2,你将通过20%的路径,下一帧,如果c仍然是0.2,你将通过剩余路径的20%,以此类推。
那么它是像1一样工作(你必须改变c)还是像2一样工作(你不需要改变c)呢?
发布于 2019-06-13 00:47:39
变换位置和目标之间的距离是指数衰减的。距离每帧缩小(1个速度)(假设速度小于1)。假设你的游戏运行速度是60FPS。如果由于某种原因,帧速率降到了30FPS,那么deltaTime就会变成原来的两倍,你需要执行Lerp 2次。在这种情况下,距离将收缩(1 -速度),然后再次(1 -速度)产生(1 -速度)^2收缩的结果。由此,你可以概括出距离的收缩量是(1 - deltaTime )^ (deltaTime / baseDeltaTime),baseDeltaTime是游戏应该以1/60 (对于60FPS)的速度运行的速度。放入代码中:
transform.position = Vector3.Lerp(transform.position, destination.position, 1 - Mathf.Pow(1 - speed * 3.0f, Time.deltaTime * 60));发布于 2017-05-01 22:56:38
对象会到达目标位置,因为您的开始位置是当前位置,并且在lerping之后,您将对象的位置设置为Lerp的结果位置。如果你改变你的起始位置到一个普通的速度,它将Lerp变成“Vector3 * Time.deltaTime * 3f”。
发布于 2017-05-02 19:46:56
我猜你不明白lerp是如何在统一中工作的。我将向你推荐这篇Robbert 的文章。
我经常看到这样的事情:
transform.position = Vector3.Lerp(startPos, endPos, Time.deltaTime);
发帖的人通常认为Vector3.Lerp是“坏的”,但真正的问题是他们没有正确使用它。
Lerp,“线性插值”的缩写,做一件非常简单的事情:给定两个值,x和y,它返回一个介于两者之间的t%的值。如果您希望输出发生变化,则您传递的参数需要反映这一点!
在上面的例子中,仅仅传入Time.deltaTime是没有意义的,因为这只是最近一帧中经过的时间。如果你的游戏运行在一个固定的50fps,它总是会是0.02。
https://stackoverflow.com/questions/43720669
复制相似问题