在模拟步骤期间是否使用模拟子步。
当将模拟设置为按帧运行时,通过将 Physics2D.simulationMode 设置为 Update 或 Script,此选项将控制是否可以使用模拟子步。
当出现低帧率情况时,模拟将使用较大的时间步长进行模拟。这会导致模拟精度降低。如果帧率过低,模拟将开始崩溃,导致关节完全错误,脉冲非常大,刚体运动不规则。这种情况被称为“模拟爆炸”,意味着模拟本质上处于故障状态,通常无法在不重新加载场景的情况下恢复,实际上重置了物理场景状态。显然,应该避免这种情况。
为了避免这种情况,可以使用模拟子步。它通过监控帧率是否低于由 Physics2D.minSubStepFPS 控制的指定阈值来实现这一点。如果它没有低于此阈值,则将执行正常的模拟步骤。但是,如果它低于此阈值,则物理系统将执行子步。子步通过将当前帧率 delta-time 分割成多个子步来工作,每个子步都具有更高的频率。这样做可以确保物理始终使用等于或高于指定 Physics2D.minSubStepFPS 的频率进行模拟。这实际上保证了稳定的模拟。
使用此功能的代价是子步(当超过上述阈值时)会增加 CPU 成本,因为模拟正在运行多次,尽管这可以通过不计算所有子步的接触来减少,如由 Physics2D.useSubStepContacts 控制。应使用 Unity Profiler 中的 Physics 2D 模块监控此成本。
阈值由 Physics2D.minSubStepFPS 控制,允许的最大子步数由 Physics2D.maxSubStepCount 控制。
其他资源:Physics2D.maxSubStepCount、Physics2D.minSubStepFPS、PhysicsScene2D.subStepCount 和 PhysicsScene2D.subStepLostTime。