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

有効にすると、シミュレーションされたパーツは現在の睡眠状態に従ってアウトラインされ、覚醒 パーツは赤、睡眠チェック中 パーツはオレンジ、睡眠中 パーツはアウトラインなしで表示されます。