睡眠系统

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

每个 组件 在 Roblox 引擎中对应一个 刚体。每个刚体的位置和速度描述了它的位置和移动速度,更新每个组件的位置和速度是引擎的主要任务之一。

组件可以通过 机械约束移动约束 连接在一起,形成诸如汽车或飞机的机制。随着机制中组件和约束的数量增加,模拟机制所需的时间也会增加。幸运的是,当睡眠系统确定引擎可以跳过对静止组件的模拟时,这种增加会被抵消。

睡眠状态

每个组件可以处于以下三种状态之一:清醒睡眠睡眠检查

清醒

清醒的组件正在移动或加速,因此会被模拟。组件从 睡眠睡眠检查 中的情况进入此状态,以及 额外的唤醒情况

睡眠

睡眠中的组件既不移动也不加速,因此不被模拟。

通过检查其 线性速度旋转速度 来判断组件是否静止。如果其线性速度低于 线性速度 阈值,并且其旋转速度低于 旋转速度 阈值,则该组件被认为是静止的。

在某些情况下,仅检查非移动状态可能会导致组件错误地进入睡眠状态。例如,如果一个球被直向抛出,随着其到达最大高度,其速度接近零,可能会使其进入睡眠状态而永远不会落下。为了处理这种情况,引擎会考虑如果其 线性加速度旋转加速度 大于 线性加速度旋转加速度 阈值,则该组件正在加速,并会阻止其进入睡眠状态。

睡眠检查

与至少一个 清醒 邻近组件共享约束的非移动组件进入 睡眠检查 状态,并且不被模拟。在每个世界步骤中,睡眠检查组件会检查以下内容:

如果这些条件中的任何一个为真,或在任何 额外的唤醒情况 下,睡眠检查组件将进入 清醒 状态。

阈值参考

以下表格提供用于确定组件是否移动或加速的各种速度和加速度阈值。

阈值状态变化
线性速度0.33 studs/s清醒睡眠
旋转速度0.42 studs/s清醒睡眠
线性加速度0.24 studs/s²清醒睡眠
旋转加速度0.24 studs/s²清醒睡眠
邻近线性速度0.48 studs/s睡眠检查清醒
邻近旋转速度0.59 studs/s睡眠检查清醒
唤醒线性加速度16.9 studs/s²清醒睡眠
唤醒旋转加速度16.9 studs/s²清醒睡眠

旋转速度和加速度阈值反映的是位于组件边界球体(包含组件中所有部件的球体)上的一个点的速度和加速度,该点与组件刚性运动。

施动关节

有时开发者希望使用 施动关节 以非常缓慢的速度移动部件,施动关节是一种施加力或运动以驱动连接部件的约束,例如使用 HingeConstraintMotor。为了支持这些场景,连接到施动关节的组件使用更严格的睡眠速度阈值。这延迟了这些组件进入睡眠状态的时间,允许在不让物理系统提前让它们进入睡眠的情况下进行缓慢、可控的运动。

以下被视为施动关节:

额外的唤醒情况

除了 睡眠检查睡眠 中阐明的情况外,当以下情况发生时,组件会进入 清醒 状态:

调试可视化

在游戏测试期间,您可以通过在 3D 视口右上角的 可视化选项 小部件中切换 清醒部件 显示组件的睡眠状态。

3D 视口特写视图,右上角标示了可视化选项按钮。

启用后,模拟的部件将按照其当前睡眠状态进行轮廓显示,清醒 部件以红色轮廓显示,睡眠检查 部件以橙色轮廓显示,睡眠 部件则不进行轮廓显示。

模拟部件按照代表其当前睡眠状态的颜色进行轮廓显示
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。