Cada montagem na Roblox Engine corresponde a um único corpo rígido. A posição e a velocidade de cada corpo rígido descrevem onde ele está localizado e quão rápido está se movendo, e uma das principais tarefas do motor é atualizar as posições e velocidades de cada montagem.
As montagens podem ser conectadas entre si com restrições mecânicas e restrições de mover para formar mecanismos como carros ou aviões. À medida que o número de montagens e restrições em um mecanismo aumenta, o tempo necessário para simular o mecanismo também aumenta. Felizmente, esse aumento é compensado quando o sistema de sono determina que o motor pode pular a simulação de montagens não em movimento.
Estados de sono
Cada montagem pode estar em um dos três estados: acordado, dormindo ou verificando sono.
Acordado
Uma montagem acordada está se movendo ou acelerando, e, portanto, é simulada. As montagens entram nesse estado a partir de situações descritas em dormindo e verificando sono, bem como em situações adicionais de despertar.
Dormindo
Uma montagem dormindo não está se movendo nem acelerando, e, portanto, não é simulada.
Uma montagem é considerada não em movimento verificando sua velocidade linear e velocidade rotacional. Se sua velocidade linear for inferior ao limite de Velocidade Linear e sua velocidade rotacional for inferior ao limite de Velocidade Rotacional, a montagem é considerada não em movimento.
Em alguns casos, verificar simplesmente a falta de movimento causaria uma montagem a entrar incorretamente no estado de dormir. Por exemplo, se uma bola é lançada para cima, sua velocidade se aproxima de zero conforme atinge a altura máxima, tornando-se uma candidata a entrar em sono e nunca voltar para baixo. Para lidar com tais casos, o motor considera uma montagem como acelerando se sua aceleração linear ou aceleração rotacional forem maiores que os limites de Aceleração Linear e Aceleração Rotacional, respectivamente, e impedirá que a montagem caia em sono.
Verificando sono
Uma montagem não em movimento que compartilha uma restrição com pelo menos uma montagem vizinha acordada é colocada no estado de verificando sono e não é simulada. A cada passo de mundo, uma montagem em verificação de sono verifica se:
- Sua aceleração linear é maior que o limite de Aceleração Linear de Despertar.
- Sua aceleração rotacional é maior que o limite de Aceleração Rotacional de Despertar.
- A velocidade linear de uma montagem vizinha é maior que o limite de Velocidade Linear do Vizinhos.
- A velocidade rotacional de uma montagem vizinha é maior que o limite de Velocidade Rotacional do Vizinhos.
Se alguma dessas condições for verdadeira, ou sob quaisquer das situações adicionais de despertar, a montagem em verificação de sono entra no estado acordado.
Referência de limites
A tabela a seguir fornece os vários limites de velocidade e aceleração usados para determinar se uma montagem está se movendo ou acelerando.
| Limite | Valor | Mudança de estado |
|---|---|---|
| Velocidade Linear | 0.33 studs/s | acordado ⟩ dormindo |
| Velocidade Rotacional | 0.42 studs/s | acordado ⟩ dormindo |
| Aceleração Linear | 0.24 studs/s² | acordado ⟩ dormindo |
| Aceleração Rotacional | 0.24 studs/s² | acordado ⟩ dormindo |
| Velocidade Linear do Vizinhos | 0.48 studs/s | verificando sono ⟩ acordado |
| Velocidade Rotacional do Vizinhos | 0.59 studs/s | verificando sono ⟩ acordado |
| Aceleração Linear de Despertar | 16.9 studs/s² | acordado ⟩ dormindo |
| Aceleração Rotacional de Despertar | 16.9 studs/s² | acordado ⟩ dormindo |
Os limites de velocidade rotacional e aceleração refletem a velocidade e aceleração de um ponto localizado na esfera de contorno da montagem (uma esfera que contém todas as partes de uma montagem) que se move rigidamente com a montagem.
Juntas atuadas
Às vezes, os desenvolvedores querem mover partes muito lentamente usando uma junta atuada, uma restrição que aplica força ou movimento para mover partes conectadas, como uma HingeConstraint usando um Motor. Para suportar esses cenários, montagens conectadas a juntas atuadas usam um limite de velocidade de sono mais rigoroso. Isso retarda quando essas montagens entram em sono, permitindo movimento lento e controlado sem que o sistema físico as coloque em sono prematuramente.
As seguintes são consideradas juntas atuadas:
| Restrição | Configuração | Propriedades não nulas necessárias |
|---|---|---|
| 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 |
Situações adicionais de despertar
Além das situações descritas em verificando sono e dormindo, uma montagem entra no estado acordado quando:
Colide com outra montagem que se move mais rápido que 1 studs/s.
Qualquer propriedade relacionada à física de qualquer BasePart dentro da montagem muda, incluindo:
Um impulso diferente de zero é aplicado a qualquer BasePart dentro da montagem via ApplyImpulse(), ApplyImpulseAtPosition(), ou ApplyAngularImpulse().
Qualquer alteração de propriedade relacionada à física no Workspace que afetaria a montagem, incluindo:
Um novo Constraint é criado com um Attachment que está parentado a um BasePart dentro da montagem.
Quaisquer alterações de propriedades para um Constraint com um Attachment que está parentado a um BasePart dentro da montagem.
A propriedade CurrentAngle muda para um Motor que está conectado a um BasePart dentro da montagem.
A montagem contém um VehicleSeat com um personagem jogador sentado.
A montagem está dentro do BlastRadius de uma Explosion.
Visualização de depuração
Durante os testes de jogo, você pode visualizar os estados de sono da montagem ativando as Partes Acordadas no widget Opções de Visualização no canto superior direito do viewport 3D.

Uma vez habilitado, as partes simuladas serão contornadas pelo seu estado de sono atual, com partes acordadas contornadas em vermelho, partes verificando sono contornadas em laranja, e partes dormindo sem contorno.