我正在尝试移动一个物体,使其以相同的速度在视觉上移动,而不管帧速率的波动如何。根据我的理解,我应该使用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精灵场景所以我不明白为什么方差太大了。
答案 0 :(得分:3)
如果您想计算RigidBody
的确切新位置,则应直接设置 position
。 E.g:
this.rigidBody.position += new Vector3(Time.deltaTime * 2f, 0, 0);
或者,执行您已有的代码,但使用FixedUpdate()
方法。
MovePosition()
旨在用于FixedUpdate()
方法的上下文中。 Unity3d将尝试根据将在当前位置和新位置之间插入位置的帧速率计算移动速率。您通过进行插值并在致电MovePosition()
时使用结果来混淆它。