スリープシステム

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

Roblox エンジン内の各 アセンブリ は、単一の 剛体 に対応します。各剛体の位置と速度は、それがどこに位置し、どれほど速く移動しているかを説明し、主要なエンジンタスクの 1つは、各アセンブリの位置と速度を更新することです。

アセンブリは、機械的な制約移動制約 とを組み合わせて、車や航空機などの機構を形成することができます。メカニズム内のアセンブリと制約の数が増加するにつれて、メカニズムをシミュレートするために必要な時間も増加します。幸いなことに、この増加は、 睡眠システム がエンジンが非移動アセンブリのシミュレーションをスキップできることを判断すると、オフセットされます。

就寝状態

それぞれのアセンブリは、3つの状態のいずれかにあることができます:起きている睡眠チェック、または眠っている

目覚める

起きた アセンブリ は移動または加速しており、それゆえシミュレートされています。アセンブリは、睡眠チェック睡眠 、および 追加の覚醒状況 で説明された状況からこの状態に入ります。

睡眠チェック

少なくとも 1つの起動する隣接アセンブリと制約を共有する非移動アセンブリは、 睡眠検査 状態に入り、シミュレートされません。各ワールドステップでは、睡眠検査アセンブリが次のことをチェックします:

  • 隣接アセンブリの 位置差 は、隣接移動の 境界値 より大きい。
  • 隣接アセンブリの 加速 と現在のタイムステップサイズの製品は、隣接角度速度 および/または 隣接線速度 の境界値より大きい。

これらの条件のいずれかが真であるか、または 追加の覚醒状況 のいずれかにある場合、睡眠検査アセンブリが 起きた状態 に入ります。

眠る

A 睡眠 アセンブリは移動していないし加速していないので、シミュレートされていません。

アセンブリは、 位置差 をチェックして非移動であることを決定し、最も最近のワールドステップの中で最も遠い点の質量中心からの平均位置からの最大差を計算して計算します。この偏差が 移動 の境界より大きい場合、アセンブリは 起きた状態 に入ります。

いくつかの場合、非移動をチェックするだけで、アセンブリが睡眠状態に不正確に入る可能性があります。たとえば、ボールがまっすぐ投げられると、その位置は最大高さに近づくにつれてほんの少し変化し、眠りに落ちて再び下に落ちることはありません。このような場合を処理するには、エンジンはアセンブリの加速と現在のタイムステップサイズが 線速度 および/または 角速度 の境界を超えているかどうかをモニタリングします。

境界値参照

次の表には、アセンブリが移動しているか加速しているかを判断するために使用されるさまざまな移動距離と速度の制限が示されています。

境界値状態変更
隣接移動0.01スタッド睡眠チェック起きている
隣の線速度0.2スタッド/秒睡眠チェック起きている
隣接角速度0.2ラジアン/秒睡眠チェック起きている
移動0.001スタッド眠る > 起きる
線速度0.1スタッド/秒眠る > 起きる
角度速度0.1ラジアン/秒眠る > 起きる

追加の覚醒状況

In addition to situations outlined in 睡眠チェック and 睡眠 , an assembly enters the 起きた状態 when:

デバッグ視覚化

プレイテスト中、3D ビューポートの右上隅の ビジュアライゼーションオプション ウィジェットから 目覚めたパーツ を切り替えて、アセンブリの睡眠状態を視覚化できます。

A close up view of the 3D viewport with the Visualization Options button indicated in the upper-right corner.

有効になったら、シミュレートされたパーツは、現在の睡眠状態で概要が示され、目覚めたパーツは赤で概要が示され、睡眠チェックパーツはオレンジで概要が示され、眠っていないパーツは未概要になります。

現在の睡眠状態を表す色によって図られたシミュレーションパーツ