睡眠系統

*此內容是使用 AI(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.

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

模擬零件由顏色描述其當前睡眠狀態的外觀