困惑为什么Time.deltaTime会导致不均匀的移动

时间:2017-07-05 00:12:46

标签: c# unity3d

我正在尝试移动一个物体,使其以相同的速度在视觉上移动,而不管帧速率的波动如何。根据我的理解,我应该使用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精灵场景所以我不明白为什么方差太大了。

1 个答案:

答案 0 :(得分:3)

如果您想计算RigidBody的确切新位置,则应直接设置 position。 E.g:

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

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

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