【问题标题】:Is Unity's physics ahead of rendering or behind?Unity 的物理性能领先于渲染还是落后于渲染?
【发布时间】:2019-11-28 18:24:30
【问题描述】:

根据我对this diagram 的理解,Update() 在每个游戏周期被严格调用一次,而FixedUpdate() 在 Unity 想要做物理时被调用 0 到多次。是真的吗?

我不确定的是,物理步骤通常落后于当前时间还是领先于当前时间?换句话说,Unity 是如何决定是否做物理的,比如while (currentTime - previousPhysicsUpdateTime >= fixedDeltaTime) 还是while (currentTime > previousPhysicsUpdateTime)

或者以上都不是?

【问题讨论】:

  • 物理和渲染完全分离。物理发生在固定的时间步长上,与您的帧速率无关。如果你的帧率真的很高,多帧就不能物理更新,如果你的帧率真的很低,可以有多个。你不能真的(也不应该)试图预测/试图约束两者。

标签: unity3d


【解决方案1】:

这有点像对立。物理是在固定的时间定期进行的。这意味着FixedUpdate 在固定时间基础上被调用。它是更新,取决于游戏的 fps(60 fps,更新被称为每秒 60 次)。

现在,我们通常从Update 的角度出发。这意味着如果您的 fps 较高,也许您可​​以在 FixedUpdate 发生之前进行两次 Update 调用。同样,如果 fps 下降,Updates 的数量会减少,但FixedUpdate 的数量仍然相同,因此在两个Updates 之间会有多个FixedUpdated

例如,假设 FixedUpdate 每秒发生 50 次(这是统一的默认值)。如果您的游戏以 60 fps 运行,这意味着大多数时候您将有一个 FixedUpdate 和一个 Update 调用。偶尔会有两个更新(因为更新更频繁)。如果您达到 100 fps,则可以肯定,在FixedUpdate 之前,您将始终至少有两个Update 调用。

如果这还不够清楚,我建议你看看FixedUpdate Doc

【讨论】:

  • 谢谢。物理对于虚拟世界来说可能确实是有规律的,但我怀疑从人类的角度来看它并不规律。根据该图,物理循环在主循环内部,因此它必须依赖于主循环的频率。假设一个游戏的物理过程不需要时间,但它的渲染是一个沉重的负担。游戏以 1.0 fps 运行,因此主循环需要 1 秒才能完成。在渲染过程中,物理只能等待弥补不足。所以物理学是这样的:0s 运行 50 次,等待 1s,0s 运行 50 次,等待 1s... 未验证,但我觉得 Unity 是这样工作的。
猜你喜欢
  • 2015-04-19
  • 2019-02-03
  • 2013-01-31
  • 2012-08-25
  • 2021-11-10
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多