我正在尝试移动一个对象,以便无论帧频如何波动,它都能以相同的速度视觉移动.据我了解,我应该使用Time.deltaTime来确定每次Update迭代期间要移动多远.我的更新代码是这样的:
void Update()
{
this.rigidBody.MovePosition(this.transform.position + new Vector3(Time.deltaTime * 2f, 0, 0));
}
但是,对象在屏幕上移动时会以更快和更慢的速度突然移动.如果我在每次更新期间将其固定移动(如下所示),它似乎移动均匀.
void Update()
{
this.rigidBody.MovePosition(this.transform.position + new Vector3(0.02f, 0, 0));
}
我很困惑,因为我认为在每次更新过程中将对象移动恒定的距离应该会引起抖动,因为它的速度会受到帧速率的影响.而且我认为使用Time.deltaTime应该导致帧速率无关的恒定速率移动.
我的Time.deltaTime值在0.002到0.17之间变化,我也不明白,因为我的场景非常简单,只有2D子画面,所以我不明白为什么方差这么大.
解决方法:
如果要计算RigidBody的确切新位置,则应直接设置位置.例如.:
this.rigidBody.position += new Vector3(Time.deltaTime * 2f, 0, 0);
或者,执行已存在的代码,但是要在FixedUpdate()方法中执行.
MovePosition()旨在在FixedUpdate()方法的上下文中使用. Unity3d将尝试根据将在当前位置和新位置之间插入位置的帧速率来计算移动速率.通过进行插值处理并在调用MovePosition()时使用结果,会造成混乱.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。