在 Roblox 引擎中,每个 装配体 对应一个单个 刚体。位置和速度描述每个刚体的位置和速度,其中一个主要的引擎任务是更新每个装配体的位置和速度。
装配可以与 机械限制 和 移动限制 一起连接,形成机制,例如汽车或飞机。随着机制的数量和限制增加,模拟机制的时间也会增加。幸运的是,这种增加是在 睡眠系统 确定非移动装配件模拟时,引擎可以跳过模拟非移动装配件的模
睡眠状态
醒来
醒 装配体正在移动或加速,因此在模拟中。 装配体从情况中进入此状态,例如在 睡眠检查 和 睡眠 中,以及 1> 额外的醒来情况1>。
睡眠检查
一个不会移动的装置,与至少一个 醒来 邻近的装置共享约束,将放入 睡眠检查 状态,并不会模拟。 在每个世界步骤中,睡眠检查装置检查是否:
- 邻近的Assembly的位置偏移大于邻近移动阈值。
如果以下任意条件都是真的,或者在任意 额外的醒来情况 下,睡眠检查组会进入 醒来 状态。
睡眠
一个 睡眠 组装不会移动或加速,因此不会模拟。
一个装配被确定为非移动,检查其 位置偏移,作为从最近的世界步数中心到最远的点的平均位置的最大偏移值。如果该偏移值大于 位置 阈值,装配进入 醒来 状态。
在某些情况下,只要检查非移动即可导致装配结构错误地进入睡眠状态。例如,如果球被直接投掷到最高高度,其位置几乎在一系列世界步骤接近最大高度时发生改变,使其成为一个候选人睡觉并永远不会回落。要处理这些情况
门阈参考
下表提供了各个用于确定装置是否移动或加速的速度和位置上限。
阈值 | 值 | 状态变更 |
---|---|---|
邻居移动 | 0.01 格 | 睡眠检查 > 醒来 |
邻居单向速度 | 0.2 格/秒 | 睡眠检查 > 醒来 |
邻居角度速度 | 0.2 拉达/秒 | 睡眠检查 > 醒来 |
移动 | 0.001 格 | 睡觉 > 醒来 |
直线速度 | 0.1 格/秒 | 睡觉 > 醒来 |
斜角速度 | 0.1 平方米/秒 | 睡觉 > 醒来 |
额外的醒来情况
除了在 睡眠检查 和 睡眠 中描述的情况外,一个装置在以下情况下进入 醒来 状态:
它与另一个组合件碰撞。
在装配工序中,任何 BasePart 的物理相关属性,包括:
在装配中,将非零脉冲应用于任何 BasePart 内的任何 ApplyImpulse() 、ApplyImpulseAtPosition() 或 1> Class.BasePart:ApplyAngularImpulse()|ApplyAngularImpulse()1> 。
任何与物理相关的属性变更在 Workspace 上,将影响装配,包括:
一个新的 Constraint 被创建了,其父级是一个 Attachment ,它是在装配中的父级。
任何对 Constraint 使用了一个 Attachment 作为父级的任何属性变更。
装配包含一个 VehicleSeat ,含有坐下的玩家角色。
装配在 BlastRadius 的 Explosion 的内部。
调试视图
在游戏测试时,您可以通过切换 醒来零件 从 视觉选项 widget 在 3D 视图的上右角中来视觉化装配睡眠状态。
启用时,模拟零件将以其当前的睡眠状态轮廓出现,其中 醒来 零件轮廓在红色, 睡眠检查 零件轮廓在橙色, 睡眠 零件轮廓未轮廓。