【发布时间】:2017-01-03 03:27:49
【问题描述】:
我正在 Unity 中进行机器学习模拟,我只需要对我的逻辑进行一些保证。所有物理事件都发生在 FixedUpdate() 中,因此据我了解,帧速率的波动不会影响我的结果,因为每个周期都会进行正确数量的物理调用(我将时间刻度设置得高得离谱)。这是否适用于帧速率非常低的情况,例如 1-5 fps?只要我能保持 1 或更高的帧速率,我能保证调用正确数量的物理步骤吗?
谢谢
【问题讨论】:
我正在 Unity 中进行机器学习模拟,我只需要对我的逻辑进行一些保证。所有物理事件都发生在 FixedUpdate() 中,因此据我了解,帧速率的波动不会影响我的结果,因为每个周期都会进行正确数量的物理调用(我将时间刻度设置得高得离谱)。这是否适用于帧速率非常低的情况,例如 1-5 fps?只要我能保持 1 或更高的帧速率,我能保证调用正确数量的物理步骤吗?
谢谢
【问题讨论】:
您甚至不需要设置为 1 的帧速率即可工作。物理循环和显示循环(FixedUpdate() vs Update())彼此独立。即使您的帧速率低于 1 FPS,您的物理更新仍应正确应用,它只会在渲染下一个显示帧之前执行多个物理步骤以“赶上”。请参阅 this article from the unity documentation 了解有关调用顺序的更多信息。
【讨论】:
RigidBody 的位置,您就永远不会丢失任何“物理框架”。如果您确实使用RigidBody 修改了游戏对象的位置,您可能会得到不正确的物理计算。要么在Time Manager 中增加Maximum Allowed Timestep 的值,让物理学有更多时间赶上,要么重写你的代码,所以只在更新帧期间移动RigidBody 对象...
RigidBody 的子对象并且您有动画在动画更新期间您可以移动RigidBody 的父级。