版本: Unity 6 (6000.0)
语言英语
  • C#

Physics2D.useSubStepping

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实会阅读来自用户的每项建议更改,并在适用情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

public static bool useSubStepping;

描述

在模拟步骤期间是否使用模拟子步。

当将模拟设置为按帧运行时,通过将 Physics2D.simulationMode 设置为 UpdateScript,此选项将控制是否可以使用模拟子步。

当出现低帧率情况时,模拟将使用较大的时间步长进行模拟。这会导致模拟精度降低。如果帧率过低,模拟将开始崩溃,导致关节完全错误,脉冲非常大,刚体运动不规则。这种情况被称为“模拟爆炸”,意味着模拟本质上处于故障状态,通常无法在不重新加载场景的情况下恢复,实际上重置了物理场景状态。显然,应该避免这种情况。

为了避免这种情况,可以使用模拟子步。它通过监控帧率是否低于由 Physics2D.minSubStepFPS 控制的指定阈值来实现这一点。如果它没有低于此阈值,则将执行正常的模拟步骤。但是,如果它低于此阈值,则物理系统将执行子步。子步通过将当前帧率 delta-time 分割成多个子步来工作,每个子步都具有更高的频率。这样做可以确保物理始终使用等于或高于指定 Physics2D.minSubStepFPS 的频率进行模拟。这实际上保证了稳定的模拟。

使用此功能的代价是子步(当超过上述阈值时)会增加 CPU 成本,因为模拟正在运行多次,尽管这可以通过不计算所有子步的接触来减少,如由 Physics2D.useSubStepContacts 控制。应使用 Unity Profiler 中的 Physics 2D 模块监控此成本。

阈值由 Physics2D.minSubStepFPS 控制,允许的最大子步数由 Physics2D.maxSubStepCount 控制。

其他资源:Physics2D.maxSubStepCountPhysics2D.minSubStepFPSPhysicsScene2D.subStepCountPhysicsScene2D.subStepLostTime