gpt4 book ai didi

c# - 困惑为什么 Time.deltaTime 导致运动不均匀

转载 作者:行者123 更新时间:2023-11-30 15:57:29 36 4
gpt4 key购买 nike

我正在尝试移动一个对象,使其在视觉上以相同的速度移动,而不管帧速率如何波动。根据我的理解,我应该使用 Time.deltaTime 来确定在每次 Update 迭代期间移动多远。我的更新代码是这样的:

void Update()
{
this.rigidBody.MovePosition(this.transform.position + new Vector3(Time.deltaTime * 2f, 0, 0));
}

然而,当对象在屏幕上移动时,它会以更快和更慢的速度运动。如果我在每次 Update 期间将它移动一个恒定的量(如下所示),它似乎会均匀移动。

void Update()
{
this.rigidBody.MovePosition(this.transform.position + new Vector3(0.02f, 0, 0));
}

我很困惑,因为我认为在每次 Update 期间将对象移动恒定距离应该是导致抖动的原因,因为它的速度会受到帧速率的影响。而且我认为使用 Time.deltaTime 应该会导致与帧速率无关的恒定运动速率。

我的 Time.deltaTime 值在 0.002 到 0.17 之间变化,我也不明白,因为我有一个只有 2D Sprite 的非常简单的场景,所以我不明白为什么差异如此之大太好了。

最佳答案

如果您想计算您的RigidBody 的准确新位置,您应该直接设置 position。例如:

this.rigidBody.position += new Vector3(Time.deltaTime * 2f, 0, 0);

或者,执行您已有的代码,但在 FixedUpdate() 方法中。

MovePosition() 旨在用于 FixedUpdate() 方法的上下文中。 Unity3d 将尝试根据将在当前位置和新位置之间插入位置的帧速率来计算移动速率。当您调用 MovePosition() 时,您还进行了插值并使用了结果,从而混淆了它。

关于c# - 困惑为什么 Time.deltaTime 导致运动不均匀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44915415/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com