各アセンブリはRobloxエンジン内の単一の剛体に対応しています。各剛体の位置と速度は、その位置と移動速度を示し、エンジンの主なタスクの1つは、各アセンブリの位置と速度を更新することです。
アセンブリは、機械的制約やmover制約で接続され、車や飛行機などのメカニズムを形成します。メカニズム内のアセンブリと制約の数が増えると、メカニズムをシミュレートするのに必要な時間も増加します。幸いなことに、スリープシステムはエンジンが動いていないアセンブリのシミュレーションをスキップできると判断したときに、この増加を相殺します。
スリープ状態
各アセンブリは、起きている、スリープ中、またはスリープチェック中のいずれかの状態にあります。
起きている
起きているアセンブリは移動中または加速中であり、したがってシミュレーションされます。アセンブリは、スリープ中やスリープチェック中の状況からこの状態に入ります。また、追加の起床状況からも入ります。
スリープ中
スリープ中のアセンブリは移動も加速もしておらず、したがってシミュレーションされません。
アセンブリが動いていないと判断されるのは、その線形速度と回転速度をチェックすることによってです。線形速度が線形速度の閾値未満であり、回転速度が回転速度の閾値未満であれば、そのアセンブリは動いていないと見なされます。
場合によっては、単に動いていないかどうかをチェックするだけでは、アセンブリが誤ってスリープ状態に入ることがあります。たとえば、ボールが真上に投げられると、その速度は最大の高さに達するにつれてゼロに近づき、スリープ状態に入る候補となり、二度と落ちてこなくなります。このような場合に対処するために、エンジンはアセンブリの線形加速度または回転加速度がそれぞれ線形加速度および回転加速度の閾値を超えている場合、アセンブリは加速中と見なされ、スリープ状態に入るのを防ぎます。
スリープチェック中
動いていないアセンブリが少なくとも1つの起きている隣接アセンブリと制約を共有している場合、そのアセンブリはスリープチェック中の状態に置かれ、シミュレーションされません。各ワールドステップで、スリープチェック中のアセンブリは次のことを確認します:
- 線形加速度が起床線形加速度の閾値を超えている。
- 回転加速度が起床回転加速度の閾値を超えている。
- 隣接アセンブリの線形速度が隣接線形速度の閾値を超えている。
- 隣接アセンブリの回転速度が隣接回転速度の閾値を超えている。
これらの条件のいずれかが真である場合、または追加の起床状況のいずれかの下で、スリープチェック中のアセンブリは起きている状態に入ります。
閾値参照
以下の表は、アセンブリが移動または加速しているかどうかを判断するために使用されるさまざまな速度および加速度の閾値を提供します。
| 閾値 | 値 | 状態変更 |
|---|---|---|
| 線形速度 | 0.33 studs/s | 起きている ⟩ スリープ中 |
| 回転速度 | 0.42 studs/s | 起きている ⟩ スリープ中 |
| 線形加速度 | 0.24 studs/s² | 起きている ⟩ スリープ中 |
| 回転加速度 | 0.24 studs/s² | 起きている ⟩ スリープ中 |
| 隣接線形速度 | 0.48 studs/s | スリープチェック中 ⟩ 起きている |
| 隣接回転速度 | 0.59 studs/s | スリープチェック中 ⟩ 起きている |
| 起床線形加速度 | 16.9 studs/s² | 起きている ⟩ スリープ中 |
| 起床回転加速度 | 16.9 studs/s² | 起きている ⟩ スリープ中 |
回転速度および加速度の閾値は、アセンブリのバウンディングスフィア(アセンブリ内のすべての部品を含むスフィア)上の点の速度および加速度を反映しています。この点はアセンブリとともに剛体として移動します。
アクチュエータジョイント
時々、開発者はアクチュエータジョイントを使用して部品を非常に遅く移動させたいと考えます。これは、接続された部品を駆動するために力または動作を適用する制約であり、たとえばHingeConstraintがMotorを使用する場合です。これらのシナリオをサポートするために、アクチュエータジョイントに接続されたアセンブリは、より厳格なスリープ速度の閾値を使用します。これにより、これらのアセンブリがスリープ状態に入るのが遅れ、物理システムが早期にスリープ状態に入ることなく、遅く制御された動作が可能になります。
以下はアクチュエータジョイントと見なされるものです:
追加の起床状況
スリープチェック中やスリープ中に概説された状況に加えて、アセンブリは次のときに起きている状態に入ります:
1 studs/sより速く移動している別のアセンブリと衝突したとき。
アセンブリ内の任意のBasePartの物理関連プロパティが変更されたとき、これには以下が含まれます:
アセンブリ内の任意のBasePartに対して非ゼロのインパルスがApplyImpulse()、ApplyImpulseAtPosition()、またはApplyAngularImpulse()を介して適用されたとき。
アセンブリに影響を与えるWorkspace上の任意の物理関連プロパティが変更されたとき、これには以下が含まれます:
アセンブリ内のBasePartに親付けされたAttachmentを持つ新しいConstraintが作成されたとき。
アセンブリ内のBasePartに親付けされたAttachmentを持つConstraintの任意のプロパティが変更されたとき。
アセンブリ内のBasePartに接続されたMotorのCurrentAngleプロパティが変更されたとき。
アセンブリが座っているプレイヤーキャラクターを持つVehicleSeatを含むとき。
アセンブリがBlastRadius内にあるとき。
デバッグ可視化
プレイテスト中に、3Dビューポートの右上隅にある可視化オプションウィジェットから起きている部品をトグルしてアセンブリのスリープ状態を可視化できます。

有効にすると、シミュレーションされた部品は現在のスリープ状態によってアウトラインされ、起きている部品は赤で、スリープチェック中部品はオレンジで、スリープ中部品はアウトラインなしで表示されます。