Jede Baugruppe im Roblox-Engine entspricht einem einzelnen starren Körper. Die Position und Geschwindigkeit jedes starren Körpers beschreiben, wo er sich befindet und wie schnell er sich bewegt. Eine der Hauptaufgaben der Engine besteht darin, die Positionen und Geschwindigkeiten jeder Baugruppe zu aktualisieren.
Baugruppen können mit mechanischen Einschränkungen und Mover-Einschränkungen verbunden werden, um Mechanismen wie Autos oder Flugzeuge zu bilden. Wenn die Anzahl der Baugruppen und Einschränkungen in einem Mechanismus zunimmt, erhöht sich auch die benötigte Zeit zur Simulation des Mechanismus. Glücklicherweise wird dieser Anstieg ausgeglichen, wenn das Schlafsystem feststellt, dass die Engine die Simulation nicht bewegter Baugruppen überspringen kann.
Schlafzustände
Jede Baugruppe kann sich in einem von drei Zuständen befinden: wach, schlafend oder schlaf-überprüfend.
Wach
Eine wach Baugruppe bewegt sich oder beschleunigt, und wird daher simuliert. Baugruppen gelangen in diesen Zustand aus Situationen, die in schlafend und schlaf-überprüfend beschrieben sind, sowie aus zusätzlichen Wachsituationen.
Schlafend
Eine schlafend Baugruppe bewegt sich weder noch beschleunigt sie und wird daher nicht simuliert.
Eine Baugruppe wird als nicht bewegend erkannt, indem ihre lineare Geschwindigkeit und rotatorische Geschwindigkeit überprüft werden. Wenn ihre lineare Geschwindigkeit unter dem Linearen Geschwindigkeits Schwellenwert und ihre rotatorische Geschwindigkeit unter dem Rotatorischen Geschwindigkeits Schwellenwert liegt, wird die Baugruppe als nicht bewegend angesehen.
In einigen Fällen würde eine einfache Überprüfung auf Nichtbewegung dazu führen, dass eine Baugruppe fälschlicherweise in den schlafenden Zustand übergeht. Wenn beispielsweise ein Ball gerade nach oben geworfen wird, nähert sich seine Geschwindigkeit null, wenn er seine maximale Höhe erreicht, was ihn zu einem Kandidaten macht, um zu schlafen und nie wieder herunterzufallen. Um solche Fälle zu behandeln, betrachtet die Engine eine Baugruppe als beschleunigend, wenn ihre lineare Beschleunigung oder rotatorische Beschleunigung die Lineare Beschleunigung und Rotatorische Beschleunigung Schwellenwerte übersteigt und verhindert, dass die Baugruppe in den Schlafzustand übergeht.
Schlaf-überprüfend
Eine nicht bewegende Baugruppe, die eine Einschränkung mit mindestens einer wach benachbarten Baugruppe teilt, wird in den Zustand schlaf-überprüfend versetzt und nicht simuliert. Bei jedem Welt-Schritt überprüft eine schlaf-überprüfende Baugruppe, ob:
- Ihre lineare Beschleunigung größer als der Wach Lineare Beschleunigungs Schwellenwert ist.
- Ihre rotatorische Beschleunigung größer als der Wach Rotatorische Beschleunigungs Schwellenwert ist.
- Die lineare Geschwindigkeit einer benachbarten Baugruppe größer als der Nachbar Lineare Geschwindigkeits Schwellenwert ist.
- Die rotatorische Geschwindigkeit einer benachbarten Baugruppe größer als der Nachbar Rotatorische Geschwindigkeits Schwellenwert ist.
Wenn eine dieser Bedingungen wahr ist, oder unter einer der zusätzlichen Wachsituationen, wechselt die schlaf-überprüfende Baugruppe in den wach Zustand.
Schwellenwertreferenz
Die folgende Tabelle listet die verschiedenen Geschwindigkeits- und Beschleunigungs-Schwellenwerte auf, die verwendet werden, um zu bestimmen, ob eine Baugruppe sich bewegt oder beschleunigt.
| Schwellenwert | Wert | Zustandswechsel |
|---|---|---|
| Lineare Geschwindigkeit | 0,33 studs/s | wach ⟩ schlafend |
| Rotatorische Geschwindigkeit | 0,42 studs/s | wach ⟩ schlafend |
| Lineare Beschleunigung | 0,24 studs/s² | wach ⟩ schlafend |
| Rotatorische Beschleunigung | 0,24 studs/s² | wach ⟩ schlafend |
| Nachbar Lineare Geschwindigkeit | 0,48 studs/s | schlaf-überprüfend ⟩ wach |
| Nachbar Rotatorische Geschwindigkeit | 0,59 studs/s | schlaf-überprüfend ⟩ wach |
| Wach Lineare Beschleunigung | 16,9 studs/s² | wach ⟩ schlafend |
| Wach Rotatorische Beschleunigung | 16,9 studs/s² | wach ⟩ schlafend |
Die rotatorischen Geschwindigkeits- und Beschleunigungsschwellenwerte spiegeln die Geschwindigkeit und Beschleunigung eines Punktes wider, der sich auf der Begrenzungskugel der Baugruppe (eine Kugel, die alle Teile in einer Baugruppe enthält) befindet und starr mit der Baugruppe bewegt.
Aktuierte Gelenke
Manchmal möchten Entwickler Teile sehr langsam mit einem aktuierenden Gelenk bewegen, einer Einschränkung, die Kraft oder Bewegung anwendet, um verbundene Teile anzutreiben, wie eine HingeConstraint, die einen Motor verwendet. Um solche Szenarien zu unterstützen, verwenden Baugruppen, die mit aktuierenden Gelenken verbunden sind, einen strengeren Schlafgeschwindigkeitsschwellenwert. Dies verzögert, wann diese Baugruppen einschlafen, sodass langsame, kontrollierte Bewegungen möglich sind, ohne dass das Physiksystem sie vorzeitig in den Schlafzustand versetzt.
Die folgenden gelten als aktierte Gelenke:
| Einschränkung | Konfiguration | Erforderliche nicht null Eigenschaften |
|---|---|---|
| AlignOrientation | RigidityEnabled = false | |
| AlignPosition | RigidityEnabled = false | |
| AngularVelocity | — | |
| AnimationConstraint | IsKinematic = false | |
| CylindricalConstraint | ActuatorType = Motor | |
| ActuatorType = Servo | ||
| CylindricalConstraint | AngularActuatorType = Motor | |
| AngularActuatorType = Servo | ||
| HingeConstraint | ActuatorType = Motor | |
| ActuatorType = Servo | ||
| LinearVelocity | VelocityConstraintMode = Line |
|
| VelocityConstraintMode = Plane | ||
| VelocityConstraintMode = Vector | ||
| PrismaticConstraint | ActuatorType = Motor | |
| ActuatorType = Servo | ||
| RopeConstraint | WinchEnabled = true |
Zusätzliche Wachsituationen
Neben den in schlaf-überprüfend und schlafend beschriebenen Situationen wechselt eine Baugruppe in den wach Zustand, wenn:
Sie mit einer anderen Baugruppe kollidiert, die sich schneller als 1 studs/s bewegt.
Eine physikbezogene Eigenschaft eines beliebigen BasePart innerhalb der Baugruppe sich ändert, einschließlich:
Ein nicht null Impuls auf ein beliebiges BasePart innerhalb der Baugruppe mittels ApplyImpulse(), ApplyImpulseAtPosition() oder ApplyAngularImpulse() angewendet wird.
Änderungen an physikbezogenen Eigenschaften auf dem Workspace, die die Baugruppe betreffen würden, einschließlich:
Eine neue Constraint mit einer Attachment erstellt wird, die einem BasePart innerhalb der Baugruppe zugeordnet ist.
Änderungen an Eigenschaften für eine Constraint mit einer Attachment, die einem BasePart innerhalb der Baugruppe zugeordnet ist.
Die CurrentAngle Eigenschaft für einen Motor, der mit einem BasePart innerhalb der Baugruppe verbunden ist, sich ändert.
Die Baugruppe enthält einen VehicleSeat mit einem sitzenden Spielercharakter.
Die Baugruppe sich innerhalb des BlastRadius einer Explosion befindet.
Debug-Visualisierung
Während des Testspiels können Sie die Schlafzustände von Baugruppen visualisieren, indem Sie die Wach Teile im Visualisierungs Optionen Widget in der oberen rechten Ecke des 3D-Viewport aktivieren.

Sobald aktiviert, werden simulierte Teile von ihrem aktuellen Schlafzustand umrandet, wobei wach Teile rot umrandet, schlaf-überprüfend Teile orange umrandet und schlafend Teile nicht umrandet sind.