Cada conjunto en el motor de Roblox corresponde a un solo cuerpo rígido. La posición y velocidad de cada cuerpo rígido describen dónde se encuentra y qué tan rápido se mueve, y una de las tareas principales del motor es actualizar las posiciones y velocidades de cada conjunto.
Los conjuntos pueden estar conectados entre sí con restricciones mecánicas y restricciones de mover para formar mecanismos como coches o aviones. A medida que aumenta el número de conjuntos y restricciones en un mecanismo, también aumenta el tiempo requerido para simular el mecanismo. Afortunadamente, este aumento se compensa cuando el sistema de sueño determina que el motor puede omitir la simulación de conjuntos que no se mueven.
Estados de sueño
Cada conjunto puede estar en uno de tres estados: despierto, durmiendo o verificando sueño.
Despierto
Un conjunto despierto está en movimiento o acelerando, y por lo tanto es simulado. Los conjuntos entran en este estado desde situaciones descritas en durmiendo y verificando sueño, así como situaciones adicionales de despertar.
Durmiendo
Un conjunto durmiendo no está ni en movimiento ni acelerando, y por lo tanto no es simulado.
Se determina que un conjunto no está en movimiento al verificar su velocidad lineal y velocidad rotacional. Si su velocidad lineal es menor que el umbral de Velocidad Lineal y su velocidad rotacional es menor que el umbral de Velocidad Rotacional, el conjunto se considera que no se está moviendo.
En algunos casos, simplemente verificar la falta de movimiento podría hacer que un conjunto entre incorrectamente en el estado de sueño. Por ejemplo, si se lanza una bola hacia arriba, su velocidad se acerca a cero a medida que alcanza su altura máxima, lo que la convierte en una candidata para dormir y nunca volver a caer. Para manejar tales casos, el motor considera que un conjunto está acelerando si su aceleración lineal o aceleración rotacional son mayores que los umbrales de Aceleración Lineal y Aceleración Rotacional, respectivamente, y evitará que el conjunto se duerma.
Verificando sueño
Un conjunto que no se mueve y que comparte una restricción con al menos un conjunto despierto vecino se pone en el estado de verificando sueño y no es simulado. En cada paso del mundo, un conjunto en verificación de sueño verifica si:
- Su aceleración lineal es mayor que el umbral de Aceleración Lineal de Despertar.
- Su aceleración rotacional es mayor que el umbral de Aceleración Rotacional de Despertar.
- La velocidad lineal de un conjunto vecino es mayor que el umbral de Velocidad Lineal Vecina.
- La velocidad rotacional de un conjunto vecino es mayor que el umbral de Velocidad Rotacional Vecina.
Si alguna de estas condiciones es verdadera, o bajo cualquiera de las situaciones adicionales de despertar, el conjunto en verificación de sueño entra en el estado despierto.
Referencia de umbrales
La siguiente tabla proporciona los diversos umbrales de velocidad y aceleración utilizados para determinar si un conjunto se mueve o acelera.
| Umbral | Valor | Cambio de estado |
|---|---|---|
| Velocidad Lineal | 0.33 studs/s | despierto ⟩ durmiendo |
| Velocidad Rotacional | 0.42 studs/s | despierto ⟩ durmiendo |
| Aceleración Lineal | 0.24 studs/s² | despierto ⟩ durmiendo |
| Aceleración Rotacional | 0.24 studs/s² | despierto ⟩ durmiendo |
| Velocidad Lineal Vecina | 0.48 studs/s | verificando sueño ⟩ despierto |
| Velocidad Rotacional Vecina | 0.59 studs/s | verificando sueño ⟩ despierto |
| Aceleración Lineal de Despertar | 16.9 studs/s² | despierto ⟩ durmiendo |
| Aceleración Rotacional de Despertar | 16.9 studs/s² | despierto ⟩ durmiendo |
Los umbrales de velocidad y aceleración rotacionales reflejan la velocidad y la aceleración de un punto ubicado en la esfera de contorno del conjunto (una esfera que contiene todas las partes en un conjunto) que se mueve rígidamente con el conjunto.
Juntas actuadas
A veces, los desarrolladores quieren mover partes muy lentamente utilizando una junta actuada, una restricción que aplica fuerza o movimiento para impulsar partes conectadas, como un HingeConstraint usando un Motor. Para apoyar estos escenarios, los conjuntos conectados a juntas actuadas utilizan un umbral de velocidad de sueño más estricto. Esto retrasa cuándo esos conjuntos se duermen, permitiendo un movimiento controlado y lento sin que el sistema de física los coloque a dormir prematuramente.
Las siguientes se consideran juntas actuadas:
| Restricción | Configuración | Propiedades no cero requeridas |
|---|---|---|
| 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 |
Situaciones adicionales de despertar
Además de las situaciones descritas en verificando sueño y durmiendo, un conjunto entra en el estado despierto cuando:
Colisiona con otro conjunto que se mueve más rápido que 1 studs/s.
Cualquier propiedad relacionada con la física de cualquier BasePart dentro del conjunto cambia, incluyendo:
Se aplica un impulso no cero a cualquier BasePart dentro del conjunto a través de ApplyImpulse(), ApplyImpulseAtPosition(), o ApplyAngularImpulse().
Cualquier cambio de propiedad relacionada con la física en el Workspace que afectaría al conjunto, incluyendo:
Se crea una nueva Constraint con una Attachment que está parentada a un BasePart dentro del conjunto.
Cualquier cambio de propiedad para un Constraint con una Attachment que está parentada a un BasePart dentro del conjunto.
El cambio de la propiedad CurrentAngle para un Motor que está conectado a un BasePart dentro del conjunto.
El conjunto contiene un VehicleSeat con un personaje jugador sentado.
El conjunto está dentro del BlastRadius de una Explosion.
Visualización de depuración
Durante las pruebas de juego, puedes visualizar los estados de sueño del conjunto activando las Partes Despertas desde el widget de Opciones de Visualización en la esquina superior derecha de la vista 3D.

Una vez habilitado, las partes simuladas estarán delineadas por su estado de sueño actual, con partes despiertas delineadas en rojo, partes verificando sueño delineadas en naranja, y partes durmiendo sin delinear.