在 Roblox 引擎中的每個 組裝 對應單個 剛性體 。每個剛性體的位置和速度描述它所在的位置和移動速度,主要引擎任務之一是更新每個裝配的位置和速度。
裝配可以與 機械限制 和 傳動限制 一起連接,形成汽車或飛機等機械裝置。隨著機制中的組裝和限制數量增加,模擬機制所需的時間也會增加。幸運的是,當 睡眠系統 確定引擎可以跳過非移動裝配的模擬時,這種增加將被抵消。
睡眠狀態
醒來
一個 醒來 裝配正在移動或加速,因此被模擬。裝配狀態會從 睡眠檢查 和 睡眠 以及 額外醒來情況 中進入這個狀態。
睡眠檢查
與至少一個醒來鄰近組件分享約束的非移動裝配進入睡眠檢查狀態,並不被模擬。在每一個世界步驟時,睡眠檢查組件會檢查是否:
- 鄰近組裝的 位置偏差 大於鄰近移動的 閾值。
如果這些條件之一是真實的,或者在任何 額外喚醒情況 下,睡眠檢查組件進入 醒來 狀態。
睡眠
一個 睡眠 裝配不移動也不加速,因此不會被模擬。
一個裝配被確定為不可移動,通過檢查其 位置偏差 ,計算為最大偏差從平均位置的點最遠離其質量中心的世界步過去最新一組世界步。如果這個偏差大於 移動 閾值,則裝配進入 醒來 狀態。
在某些情況下,僅檢查非移動即可導致組裝錯誤進入睡眠狀態。例如,如果球直接向上投擲,它的位置在接近最大高度時幾乎不會改變一個世界步數,使其成為睡眠的候選人,永遠不會回落。為了處理這些情況,引擎會監控裝配加速和當前時間步驟尺寸是否超過 線速度 和/或 角速度 閾值。
閾值參考
下表提供用於判斷組件是否移動或加速的各種位移和速度閾值。
門檻 | 值 | 狀態變更 |
---|---|---|
鄰居擊退 | 0.01 格 | 睡眠檢查 ⟩ 醒來 |
鄰近線速度 | 0.2 格/秒 | 睡眠檢查 ⟩ 醒來 |
鄰近角度速度 | 0.2 射角/秒 | 睡眠檢查 ⟩ 醒來 |
移動 | 0.001 格 | 睡眠 > 醒來 |
線速度 | 0.1 格/秒 | 睡眠 > 醒來 |
角度速度 | 0.1 輪/秒 | 睡眠 > 醒來 |
額外喚醒情況
除了在 睡眠檢查 和 睡眠 中列出的情況外,一個裝配進入 醒來 狀態時:
與另一個裝配碰撞。
任何物理相關的屬性,包括在裝配中的任何 BasePart 內,包括:
非零脉冲被应用到組裝中的任何BasePart、ApplyImpulse()或ApplyImpulseAtPosition()內,通過ApplyAngularImpulse()傳送。
任何與物理相關的屬性變更在 Workspace 上,會影響組裝,包括:
新的 Constraint 被創建與組裝內的 Attachment 有父輩關係的 BasePart 一起。
對於具有 Constraint 並屬於組裝中的 Attachment 的任何屬性變更,例如添加新的 BasePart 到組裝中。
對連接到組件內的 CurrentAngle 的 Motor 屬性進行了變更,該屬性與組件內的 BasePart 相關。
裝配包含一個 VehicleSeat 與坐下的玩家角色。
裝配在 BlastRadius 的 Explosion 內。
偵錯視覺化
在遊戲測試期間,您可以在3D視角右上角的 視覺選項 控件中切換醒來零件,以視覺化裝配睡眠狀態。

啟用後,模擬零件將由其目前的睡眠狀態概述,其中 醒來 零件由紅色概述,睡眠檢查 零件由橙色概述,而 睡眠 零件未被概述。