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, und eine der Hauptaufgaben der Engine besteht darin, die Positionen und Geschwindigkeiten jeder Baugruppe zu aktualisieren.
Baugruppen können mit mechanischen Einschränkungen und Bewegungseinschrä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 Zeit, die benötigt wird, um den Mechanismus zu simulieren. Glücklicherweise wird dieser Anstieg ausgeglichen, wenn das Schlafsystem feststellt, dass die Engine die Simulation von nicht bewegenden Baugruppen überspringen kann.
Schlafzustände
Jede Baugruppe kann sich in einem von drei Zuständen befinden: wach, schlafend oder Schlafprüfung.
Wach
Eine wache Baugruppe bewegt sich oder beschleunigt und wird daher simuliert. Baugruppen gelangen in diesen Zustand aus Situationen, die in schlafend und Schlafprüfung beschrieben sind, sowie aus zusätzlichen Wachsituationen.
Schlafend
Eine schlafende Baugruppe bewegt sich weder noch beschleunigt sie und wird daher nicht simuliert.
Eine Baugruppe wird als nicht bewegend angesehen, indem ihre lineare Geschwindigkeit und rotatorische Geschwindigkeit überprüft werden. Wenn ihre lineare Geschwindigkeit unter dem Linearen Geschwindigkeits Schwellenwert liegt und ihre rotatorische Geschwindigkeit unter dem Rotatorischen Geschwindigkeits Schwellenwert liegt, wird die Baugruppe als nicht bewegend betrachtet.
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 niemals 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 überschreiten, und verhindert, dass die Baugruppe einschläft.
Schlafprüfung
Eine nicht bewegende Baugruppe, die eine Einschränkung mit mindestens einer wachen Nachbarbaugruppe teilt, wird in den Schlafprüfungs-Zustand versetzt und nicht simuliert. Bei jedem Welt-Schritt überprüft eine schlafprü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 Nachbarbaugruppe größer als der Nachbar Lineare Geschwindigkeits Schwellenwert ist.
- Die rotatorische Geschwindigkeit einer Nachbarbaugruppe größer als der Nachbar Rotatorische Geschwindigkeits Schwellenwert ist.
Wenn eine dieser Bedingungen wahr ist oder unter einer der zusätzlichen Wachsituationen, wechselt die schlafprüfende Baugruppe in den wachen Zustand.
Schwellenwertreferenz
Die folgende Tabelle bietet die verschiedenen Geschwindigkeits- und Beschleunigungsschwellenwerte, die verwendet werden, um zu bestimmen, ob eine Baugruppe sich bewegt oder beschleunigt.
| Schwellenwert | Wert | Zustandsänderung |
|---|---|---|
| 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 | Schlafprüfung ⟩ wach |
| Nachbar Rotatorische Geschwindigkeit | 0.59 studs/s | Schlafprüfung ⟩ 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 Begrenzungssphäre der Baugruppe befindet (eine Kugel, die alle Teile in einer Baugruppe enthält) und sich 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 zu bewegen, wie z.B. ein HingeConstraint, das einen Motor verwendet. Um diese Szenarien zu unterstützen, verwenden Baugruppen, die mit aktuierten Gelenken verbunden sind, einen strengeren Schlafgeschwindigkeitsschwellenwert. Dies verzögert, wann diese Baugruppen einschlafen, und ermöglicht langsame, kontrollierte Bewegungen, ohne dass das Physiksystem sie vorzeitig schlafen legt.
Die folgenden werden als aktuierte Gelenke betrachtet:
| 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 Schlafprüfung und schlafend beschriebenen Situationen wechselt eine Baugruppe in den wachen 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 über ApplyImpulse(), ApplyImpulseAtPosition() oder ApplyAngularImpulse() angewendet wird.
Änderungen an physikbezogenen Eigenschaften im Workspace, die die Baugruppe betreffen würden, einschließlich:
Eine neue Constraint mit einer Attachment erstellt wird, die an einem BasePart innerhalb der Baugruppe angeheftet ist.
Änderungen an Eigenschaften für eine Constraint mit einer Attachment, die an einem BasePart innerhalb der Baugruppe angeheftet ist.
Die CurrentAngle Eigenschaft sich für einen Motor, der mit einem BasePart innerhalb der Baugruppe verbunden ist, ändert.
Die Baugruppe enthält einen VehicleSeat mit einem sitzenden Spielercharakter.
Die Baugruppe befindet sich innerhalb des BlastRadius einer Explosion.
Debug-Visualisierung
Während des Spieltests können Sie die Schlafzustände der Baugruppen visualisieren, indem Sie Wache Teile im Visualisierungs Optionen Widget in der oberen rechten Ecke des 3D-Ansichtsfensters aktivieren.

Sobald aktiviert, werden simulierte Teile durch ihren aktuellen Schlafzustand umrandet, wobei wache Teile in Rot, Schlafprüfung Teile in Orange und schlafende Teile nicht umrandet sind.