Cada ensamble 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 está ubicado y cuán rápido se está moviendo, y una de las tareas principales del motor es actualizar las posiciones y velocidades de cada ensamble.
Las asambleas pueden conectarse juntas con restricciones mecánicas y restricciones de movimiento para formar mecanismos como autos o aviones.A medida que aumenta el número de ensambles 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 ensambles no móviles.
Estados de sueño
Cada ensamble puede estar en uno de tres estados: despierto , comprobación de sueño o durmiendo .
Despierto
Una ensamblaje despierto se está moviendo o acelerando, y por lo tanto se simula.Las bibliotecas entran en este estado desde situaciones descritas en comprobación de sueño y sueño, así como situaciones adicionales de vigilia.
Comprobación de sueño
Una asamblea no móvil que comparte una restricción con al menos una asamblea vecina despierta se pone en el estado de control de sueño y no se simula.En cada paso del mundo, una asamblea que verifica el sueño comprueba si:
- La devolución de posición de una asamblea vecina es mayor que el umbral de desplazamiento del vecino.
- El producto de la aceleración de una asamblea vecina y el tamaño del paso de tiempo actual es mayor que el umbral de Velocidad angular del vecino y/o Velocidad lineal del vecino.
Si alguna de estas condiciones es verdadera o bajo cualquiera de las situaciones de vigilia adicionales, la asamblea de control de sueño entra en el estado despierto.
Durmiendo
Una ensamblaje durmiente no se está moviendo ni acelerando, y por lo tanto no se simula.
Se determina que una asamblea no se mueva verificando su desviación de posición , calculada como la desviación máxima de la posición media del punto más lejano de su centro de masa sobre el conjunto más reciente de pasos mundiales.Si esta desviación es mayor que el umbral de desplazamiento, la instalación entra en el estado despierto.
En algunos casos, simplemente verificar que no se mueva causaría que una asamblea ingrese incorrectamente al estado de sueño.Por ejemplo, si una bola se lanza directamente hacia arriba, su posición apenas cambia por una serie de pasos mundiales a medida que se acerca a su altura máxima, haciéndola candidata a dormir y nunca volver a bajar.Para manejar tales casos, el motor monitorea si el producto de la aceleración y el tamaño del paso de tiempo actual de la ensambladora supera el umbral de velocidad lineal y/o velocidad angular.
Referencia de umbral
La siguiente tabla proporciona los diferentes umbrales de desplazamiento y velocidad utilizados para determinar si una pieza se está moviendo o acelerando.
Cantidad umbral | Valor | Cambio de estado |
---|---|---|
Desplazamiento de vecinos | 0,01 tacos | comprobación de sueño ⟩ despierto |
Velocidad lineal del vecino | 0.2 tacos/s | comprobación de sueño ⟩ despierto |
Velocidad angular del vecino | 0.2 radianes/s | comprobación de sueño ⟩ despierto |
Desplazamiento | 0.001 tacos | durmiendo ⟩ despierto |
Velocidad lineal | 0.1 tacos/s | durmiendo ⟩ despierto |
Velocidad angular | 0.1 radianes/s | durmiendo ⟩ despierto |
Situaciones de despertar adicionales
Además de las situaciones descritas en comprobación de sueño y sueño, una asamblea entra en el estado despierto cuando:
Colisiona con otra asamblea.
Cualquier propiedad relacionada con la física de cualquier BasePart dentro de los cambios de la asamblea, incluyendo:
Se aplica un impulso no nulo a cualquier BasePart dentro de la instalación a través de ApplyImpulse() , ApplyImpulseAtPosition() o ApplyAngularImpulse() .
Cualquier cambio de propiedad relacionado con la física en el Workspace que afectaría la instalación, incluyendo:
Se crea un nuevo Constraint con un Attachment que es padre de un BasePart dentro de la asamblea.
Cualquier cambio de propiedad para un Constraint con un Attachment que sea padre de un BasePart dentro de la asamblea.
Los cambios de propiedad de CurrentAngle para un Motor que está conectado a un BasePart dentro de la asamblea.
La instalación contiene un VehicleSeat con un personaje de jugador sentado.
La ensambladora está dentro del BlastRadius de un Explosion.
Visualización de depuración
Durante las pruebas de juego, puedes visualizar los estados de sueño de montaje activando piezas despiertas desde el widget Opciones de visualización en la esquina superior derecha de la ventanilla3D.

Una vez activado, las piezas simuladas se delinearán por su estado de sueño actual, con piezas despiertas delineadas en rojo, piezas de control de sueño delineadas en naranja y piezas durmiendo sin delinear.