【问题标题】:Confused why Time.deltaTime causes uneven movement困惑为什么 Time.deltaTime 会导致运动不均匀
【发布时间】:2017-07-05 00:12:45
【问题描述】:

我正在尝试移动一个对象,使其在视觉上以相同的速度移动,而不管帧速率波动如何。据我了解,我应该使用Time.deltaTime 来确定在Update 的每次迭代期间移动多远。我的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 精灵的非常简单的场景,所以我不明白为什么差异如此之大。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。我没有意识到 MovePosition 做了自己的插值。我以为它只是立即将对象移动到一个位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多