睡眠系统

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

在 Roblox 引擎中,每个 装配体 对应一个单个 刚体。位置和速度描述每个刚体的位置和速度,其中一个主要的引擎任务是更新每个装配体的位置和速度。

装配可以与 机械限制移动限制 一起连接,形成机制,例如汽车或飞机。随着机制的数量和限制增加,模拟机制的时间也会增加。幸运的是,这种增加是在 睡眠系统 确定非移动装配件模拟时,引擎可以跳过模拟非移动装配件的模

睡眠状态

每个组合可以在三个状态之一:醒来睡眠检查睡眠

醒来

醒 装配体正在移动或加速,因此在模拟中。 装配体从情况中进入此状态,例如在 睡眠检查睡眠 中,以及 1> 额外的醒来情况1>。

睡眠检查

一个不会移动的装置,与至少一个 醒来 邻近的装置共享约束,将放入 睡眠检查 状态,并不会模拟。 在每个世界步骤中,睡眠检查装置检查是否:

  • 邻近的Assembly的位置偏移大于邻近移动阈值。
  • 邻近的组合的 加速 和当前时间步骤大小是大于 角度 和/或 长度 上限。

如果以下任意条件都是真的,或者在任意 额外的醒来情况 下,睡眠检查组会进入 醒来 状态。

睡眠

一个 睡眠 组装不会移动或加速,因此不会模拟。

一个装配被确定为非移动,检查其 位置偏移,作为从最近的世界步数中心到最远的点的平均位置的最大偏移值。如果该偏移值大于 位置 阈值,装配进入 醒来 状态。

在某些情况下,只要检查非移动即可导致装配结构错误地进入睡眠状态。例如,如果球被直接投掷到最高高度,其位置几乎在一系列世界步骤接近最大高度时发生改变,使其成为一个候选人睡觉并永远不会回落。要处理这些情况

门阈参考

下表提供了各个用于确定装置是否移动或加速的速度和位置上限。

阈值状态变更
邻居移动0.01 格睡眠检查 > 醒来
邻居单向速度0.2 格/秒睡眠检查 > 醒来
邻居角度速度0.2 拉达/秒睡眠检查 > 醒来
移动0.001 格睡觉 > 醒来
直线速度0.1 格/秒睡觉 > 醒来
斜角速度0.1 平方米/秒睡觉 > 醒来

额外的醒来情况

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

调试视图

在游戏测试时,您可以通过切换 醒来零件 从 视觉选项 widget 在 3D 视图的上右角中来视觉化装配睡眠状态。

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

启用时,模拟零件将以其当前的睡眠状态轮廓出现,其中 醒来 零件轮廓在红色, 睡眠检查 零件轮廓在橙色, 睡眠 零件轮廓未轮廓。

以代表当前睡眠状态的颜色所示示模拟零件