睡眠系统

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

Roblox 引擎中的每个 组装 对应于单个 刚性体 。每个刚性体的位置和速度描述它在哪里位置和移动速度,主要引擎任务之一是更新每个装配的位置和速度。

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

睡眠状态

每个装配可以处于三种状态之一:醒来睡眠检查睡眠

醒来

一个 醒来 的装配正在移动或加速,因此被模拟。组件从以下情况中进入此状态:睡眠检查睡眠 以及 额外的唤醒情况

睡眠检查

一个不移动的装配,与至少一个醒来的邻近装配共享约束,放入睡眠检查状态,不进行模拟。在每一步世界上,一个睡眠检查装配检查是否:

  • 邻近装配的 位置偏移 大于邻近距离阈值。
  • 邻近组装的 加速 和当前时间步大小与 邻近角度速度 和/或 邻近线速度 阈值相比大于。

如果这些条件之一是真实的,或者处于任何 额外唤醒情况 下,睡眠检查装配进入醒来状态。

睡眠

一个 睡眠 装配不移动也不加速,因此不被模拟。

组装决定不移动,通过检查其 位置偏移 来计算最大偏移量,即最近一组世界步中离其质量中心最远的点的平均位置。如果这一偏差大于运动阈值,装配进入醒来状态。

在某些情况下,仅检查非移动状态会导致组件错误地进入睡眠状态。例如,如果球被直接投向上空,其位置几乎在接近最大高度时才会发生微小的变化,使其成为睡眠的候选人,永远不会回落。为了处理这些情况,引擎会监控装配加速产品和当前时间步大小是否超过 线速度 和/或 角速度 阈值。

阈值参考

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

阈值状态变更
邻居挤占0.01 格睡眠检查 > 醒来
邻近线速度0.2 格/秒睡眠检查 > 醒来
邻近角度速度0.2 射角/秒睡眠检查 > 醒来
抵消0.001 格睡眠 > 醒来
线速度0.1 格/秒睡眠 > 醒来
扭矩角度0.1 射角/秒睡眠 > 醒来

额外的唤醒情况

除了在 睡眠检查睡眠 中描述的情况外,一个装配在以下情况下进入 醒来 状态:

调试视觉化

在游戏测试期间,您可以在 3D 视图右上角的 可视化选项 选项卡中切换 醒来的零件 来显示装配睡眠状态。

A close up view of the 3D viewport with the Visualization Options button indicated in the upper-right corner.

启用后,模拟零件将由其当前睡眠状态概述,其中 醒来 部分由红色概述,睡眠检查 部分由橙色概述,而 睡眠 部分未被概述。

由颜色描述的模拟零件概述了他们当前的睡眠状态