Elk assemblage in de Roblox Engine komt overeen met een enkele rigid body. De positie en snelheid van elk rigid body beschrijven waar het zich bevindt en hoe snel het beweegt, en een van de primaire taken van de engine is om de posities en snelheden van elke assemblage bij te werken.
Assemblages kunnen met elkaar verbonden worden door middel van mechanische beperkingen en verplaatsingsbeperkingen om mechanismen zoals auto's of vliegtuigen te vormen. Naarmate het aantal assemblages en beperkingen in een mechanisme toeneemt, neemt ook de tijd die nodig is om het mechanisme te simuleren toe. Gelukkig wordt deze toename gecompenseerd wanneer het slaapsysteem vaststelt dat de engine de simulatie van niet-bewegende assemblages kan overslaan.
Slaaptoestanden
Elke assemblage kan zich in een van de drie toestanden bevinden: wakker, slapend of slaap-controle.
Wakker
Een wakker assemblage is in beweging of versnelt, en wordt daarom gesimuleerd. Assemblages komen in deze toestand vanuit situaties die zijn uiteengezet in slapend en slaap-controle, evenals aanvullende wakker situaties.
Slapend
Een slapende assemblage beweegt of versnelt niet, en wordt daarom niet gesimuleerd.
Een assemblage wordt als niet-bewegend beschouwd door zijn lineaire snelheid en rotatiesnelheid te controleren. Als de lineaire snelheid minder is dan de Lineaire Snelheid drempel en de rotatiesnelheid minder is dan de Rotational Velocity drempel, wordt de assemblage als niet-bewegend beschouwd.
In sommige gevallen zou het simpelweg controleren op niet-beweging ervoor zorgen dat een assemblage onterecht in de slapende toestand komt. Bijvoorbeeld, als een bal recht omhoog wordt gegooid, nadert zijn snelheid nul wanneer hij zijn maximale hoogte bereikt, waardoor het een kandidaat wordt om te slapen en nooit meer naar beneden te vallen. Om dergelijke gevallen te behandelen, beschouwt de engine een assemblage als versnellend als zijn lineaire versnelling of rotatieversnelling groter zijn dan de Lineaire Versnelling en Rotational Acceleration drempels, respectievelijk, en voorkomt dat de assemblage in slaap valt.
Slaap-controle
Een niet-bewegende assemblage die een beperking deelt met ten minste één wakker buurland wordt in de slaap-controle toestand geplaatst en wordt niet gesimuleerd. Bij elke wereldstap controleert een slaap-controle assemblage of:
- Zijn lineaire versnelling groter is dan de Wakker Lineaire Versnelling drempel.
- Zijn rotatieversnelling groter is dan de Wakker Rotational Acceleration drempel.
- De lineaire snelheid van een buurland groter is dan de Buurland Lineaire Snelheid drempel.
- De rotatiesnelheid van een buurland groter is dan de Buurland Rotational Velocity drempel.
Als een van deze voorwaarden waar is, of onder een van de aanvullende wakker situaties, komt de slaap-controle assemblage in de wakker toestand.
Drempelreferentie
De volgende tabel geeft de verschillende snelheid- en versnellingdrempels weer die worden gebruikt om te bepalen of een assemblage beweegt of versnelt.
| Drempel | Waarde | Toestand verandering |
|---|---|---|
| Lineaire Snelheid | 0.33 studs/s | wakker ⟩ slapend |
| Rotatiesnelheid | 0.42 studs/s | wakker ⟩ slapend |
| Lineaire Versnelling | 0.24 studs/s² | wakker ⟩ slapend |
| Rotatieversnelling | 0.24 studs/s² | wakker ⟩ slapend |
| Buurland Lineaire Snelheid | 0.48 studs/s | slaap-controle ⟩ wakker |
| Buurland Rotatiesnelheid | 0.59 studs/s | slaap-controle ⟩ wakker |
| Wakker Lineaire Versnelling | 16.9 studs/s² | wakker ⟩ slapend |
| Wakker Rotatieversnelling | 16.9 studs/s² | wakker ⟩ slapend |
Rotatiesnelheid en versnellingdrempels weerspiegelen de snelheid en versnelling van een punt dat zich op de assemblage begrenzende bol bevindt (een bol die alle onderdelen in een assemblage bevat) en dat rigide met de assemblage beweegt.
Aangedreven gewrichten
Soms willen ontwikkelaars onderdelen heel langzaam verplaatsen met behulp van een aangedreven gewricht, een beperking die kracht of beweging toepast om verbonden onderdelen aan te drijven, zoals een HingeConstraint met een Motor. Om deze scenario's te ondersteunen, gebruiken assemblages die zijn verbonden met aangedreven gewrichten een strengere slaap snelheid drempel. Dit vertraagt wanneer die assemblages in slaap vallen, waardoor langzame, gecontroleerde beweging mogelijk is zonder dat het fysicasysteem ze voortijdig in slaap brengt.
De volgende worden beschouwd als aangedreven gewrichten:
| Beperking | Configuratie | Vereiste niet-nul eigenschappen |
|---|---|---|
| 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 |
Aanvullende wakker situaties
Naast de situaties die zijn uiteengezet in slaap-controle en slapend, komt een assemblage in de wakker toestand wanneer:
Het botst met een andere assemblage die sneller beweegt dan 1 studs/s.
Een eigenschap gerelateerd aan de fysica van een BasePart binnen de assemblage verandert, inclusief:
Een niet-nul impuls wordt toegepast op een BasePart binnen de assemblage via ApplyImpulse(), ApplyImpulseAtPosition(), of ApplyAngularImpulse().
Wijzigingen in eigenschappen gerelateerd aan de fysica op de Workspace die de assemblage zouden beïnvloeden, inclusief:
Een nieuwe Constraint wordt gemaakt met een Attachment die is gekoppeld aan een BasePart binnen de assemblage.
Wijzigingen in eigenschappen voor een Constraint met een Attachment die is gekoppeld aan een BasePart binnen de assemblage.
De CurrentAngle eigenschap verandert voor een Motor die is verbonden met een BasePart binnen de assemblage.
De assemblage bevat een VehicleSeat met een gezeten speler karakter.
De assemblage bevindt zich binnen de BlastRadius van een Explosion.
Debugvisualisatie
Tijdens het playtesten kun je de slaaptoestanden van assemblages visualiseren door Wakker onderdelen in te schakelen vanuit de Visualisatie Opties widget in de rechterbovenhoek van het 3D-venster.

Zodra dit is ingeschakeld, worden gesimuleerde onderdelen omrand door hun huidige slaaptoestand, waarbij wakker onderdelen in het rood zijn omrand, slaap-controle onderdelen in het oranje zijn omrand, en slapend onderdelen niet zijn omrand.