Version: 6000.3
语言: 中文
每帧更新
处理时间变化

修复更新

与主帧更新不同,Unity 的物理系统以固定的时间间隔更新,这对于物理模拟的准确性和一致性非常重要。固定更新之间的间隔通常称为固定时间步长一个可自定义的与帧速率无关的间隔,用于指示何时执行物理计算和 FixedUpdate() 事件。更多信息
请参阅术语表
.您可以通过两种方式读取或更改固定时间步长:

  • 在代码中,通过设置Time.fixedDeltaTime财产。
  • 在 Unity 编辑器的 时间(Time) 窗口中,通过修改 固定时间步长(Fixed Timestep) 值。

在这两种情况下,固定时间步长都以秒为单位指定。例如,值 0.01 表示每个固定时间步长的持续时间为百分之一秒,因此每秒有 100 次固定更新。

固定更新循环模拟以固定时间间隔运行的代码,但实际上固定更新之间的间隔不是固定的。这是因为固定更新总是需要一个帧来运行,并且帧的持续时间和固定时间步长的长度并不完全同步。如果固定时间步长在当前帧内完成,则关联的固定更新要到下一帧才能运行。当帧速率较低时,单个帧可能会跨越多个固定时间步长。在这种情况下,当前帧期间会累积积压的固定更新,Unity 会在下一帧中执行所有更新以赶上。

注意:有一个最大时间步长,超过该时间段,Unity 将不会尝试赶上模拟。有关详细信息,请参阅处理时间变化

Unity 提供了MonoBehaviour.FixedUpdate方法作为入口点,供您在每次固定更新时执行自己的代码。这最常用于执行你自己的物理相关代码,例如将力应用于刚体允许游戏对象受到模拟重力和其他力影响的组件。更多信息
请参阅术语表
.

您可以在执行顺序图“物理”部分查看固定更新周期期间发生的情况的更多详细信息。

帧率高于固定更新率时

如果您的应用程序以高于每秒固定时间步长数的帧速率运行,则平均帧持续时间小于单个固定时间步长的持续时间。在这种情况下,每个帧都有一个固定更新或根本没有更新。例如,如果固定时间步长值为 0.02,则每秒有 50 次固定更新。如果您的应用程序在 128 左右运行秒帧数正在运行的游戏中显示连续帧的频率。更多信息
请参阅术语表
,则每两三帧发生一次固定更新,如下所示。

一个示例显示了 FixedUpdate 以每秒 50 次更新(每次固定更新 0.02 秒)的速度运行,以及以大约每秒 128 帧的速度运行的 Player Loop。如果帧开始时已经过去了新的完整固定时间步长,则某些帧更新(以黄色标记)具有相应的 FixedUpdate(以绿色标记)。
一个示例显示了 FixedUpdate 以每秒 50 次更新(每次固定更新 0.02 秒)的速度运行,以及以大约每秒 128 帧的速度运行的 Player Loop。如果帧开始时已经过去了新的完整固定时间步长,则某些帧更新(以黄色标记)具有相应的 FixedUpdate(以绿色标记)。

此图显示了比固定更新时间步长更快的帧速率。时间向右移动,每一帧都有编号,并显示其Update在框架开头以橙色呼叫。这里的固定时间步长是 0.02 秒(每秒 50 次),游戏运行速度更快,约为每秒 128 帧。在这种情况下,有些帧具有一个固定的更新调用,而有些帧没有固定更新调用,具体取决于在帧开始时是否已完成完整的固定更新时间步长。固定时间步长周期用字母 A、B、C、D、E 标记,并且发生相应固定更新调用的帧以绿色标记。时间步长 A 的固定更新调用发生在第 4 帧的开头,时间步长 B 的固定更新调用发生在第 7 帧的开头,依此类推。

帧率低于固定更新率时

如果您的应用程序以低于固定时间步长值的帧速率运行,则平均帧持续时间将长于单个固定时间步长。这意味着固定更新的积压工作可能会在某些帧中累积,因此每个帧都有一个或多个固定更新,以允许物理模拟赶上积压工作。例如,如果固定时间步长值为 0.01,则每秒有 100 次固定更新。如果您的应用程序以每秒 40 帧左右的速度运行,Unity 平均每帧执行两到三个固定更新以跟上。当对更准确的物理进行建模比具有高帧速率更重要时,您可能需要这样的场景。

一个示例显示 Update 以大约 38 FPS 的速度运行,FixedUpdate 以每秒 100 次更新的速度运行。可以看到一帧内出现四次 FixedUpdate,以黄色标记。
一个示例显示 Update 以大约 38 FPS 的速度运行,FixedUpdate 以每秒 100 次更新的速度运行。可以看到一帧内出现四次 FixedUpdate,以黄色标记。

此图显示了当固定更新周期的运行速度快于帧速率时会发生什么情况。这里的固定时间步长是 0.01 秒(每秒 100 次),游戏帧率运行较慢,约为每秒 38 帧。在这种情况下,大多数帧在每次更新调用之前都有多个固定的更新调用,该数字取决于自上一帧以来经过的整个更新时间步长数。固定更新时间步长周期用字母 A、B、C 等标记,发生相应固定更新调用的帧标记为绿色。时间步长 A 和 B 的固定更新调用发生在第 2 帧的开始处,对帧 C、D 和 E 的固定更新调用发生在第 3 帧的开始处,依此类推。

注意:较低的时间步长值意味着更频繁的物理更新和更精确的模拟,从而导致更高的CPU负载。

其他资源

每帧更新
处理时间变化