Chaque assemblage dans le moteur Roblox correspond à un seul corps rigide .La position et la vitesse de chaque corps rigide décrivent où il se trouve et à quelle vitesse il se déplace, et l'une des tâches principales du moteur est de mettre à jour les positions et les vitesses de chaque assemblage.
Les assemblages peuvent être connectés ensemble avec contraintes mécaniques et contraintes de mouvement pour former des mécanismes tels que des voitures ou des avions.À mesure que le nombre d'assemblages et de contraintes dans un mécanisme augmente, le temps requis pour simuler le mécanisme augmente également.Heureusement, cette augmentation est compensée lorsque le système de sommeil détermine que le moteur peut ignorer la simulation des assemblages non mobiles .
États de sommeil
Chaque assemblage peut être dans l'un des trois états suivants : réveillé , vérification du sommeil ou dormir .
Éveillé
Une assemblée éveillée se déplace ou accélère, et est donc simulée.Les assemblages entrent dans cet état à partir de situations définies dans vérification du sommeil et sommeil, ainsi que situations de réveil supplémentaires.
Vérification du sommeil
Une assemblage non mobile qui partage une contrainte avec au moins une assemblage voisine active est mise dans l'état de vérification du sommeil et n'est pas simulée.À chaque étape du monde, une assemblée de vérification du sommeil vérifie si :
- La déviation de position de l'assemblage voisin est supérieure au seuil de déplacement du voisin.
- La somme de l'accélération de l'assemblage voisin et de la taille de l'instant actuel est supérieure à la limite Vitesse angulaire du voisin et/ou Vitesse linéaire du voisin .
Si l'une de ces conditions est vraie, ou dans l'une des situations d'éveil supplémentaires , l'assemblage de vérification du sommeil entre dans l'état éveillé.
Sommeil
Une assemblage de sommeil dormante ne se déplace pas ni ne s'accélère, et n'est donc pas simulée.
Une assemblage est déterminée à être non mobile en vérifiant sa déviation de position , calculée comme la déviation maximale de la position moyenne du point le plus éloigné de son centre de masse au cours du dernier ensemble de pas du monde.Si cette déviation est supérieure au seuil de déplacement, l'assemblage entre dans l'état éveillé.
Dans certains cas, vérifier simplement l'absence de mouvement provoquerait l'entrée incorrecte d'une assemblage dans l'état de sommeil.Par exemple, si une balle est lancée directement vers le haut, sa position change à peine pour un certain nombre de pas mondiaux au fur et à mesure qu'elle approche de sa hauteur maximale, ce qui la rend candidate pour dormir et ne jamais redescendre.Pour gérer de tels cas, le moteur surveille si le produit de l'accélération de l'assemblage et de la taille de l'instant actuel dépasse le seuil de vitesse linéaire et/ou de vitesse angulaire.
Référence seuil
La table suivante fournit les seuils de déplacement et de vitesse utilisés pour déterminer si une assemblage se déplace ou accélère.
Limite seuil | Valeur | Changement d'état |
---|---|---|
Déplacement du voisin | 0,01 pousses | vérification du sommeil ⟩ réveillé |
Vitesse linéaire voisine | 0,2 pousses/s | vérification du sommeil ⟩ réveillé |
Vitesse angulaire voisine | 0,2 radians/s | vérification du sommeil ⟩ réveillé |
Déplacement | 0.001 épingles | dormir ⟩ réveillé |
Vitesse linéaire | 0,1 studs/s | dormir ⟩ réveillé |
Vitesse angulaire | 0,1 radians/s | dormir ⟩ réveillé |
Situations d'éveil supplémentaires
En plus des situations décrites dans vérification du sommeil et sommeil, une assemblée entre dans l'état éveillé lorsque :
Il se heurte à une autre assemblée.
Toute propriété physique de n'importe quelle BasePart dans les modifications d'assemblage, y compris :
Un impulsion non nulle est appliquée à tout BasePart à l'intérieur de l'assemblage via ApplyImpulse(), ApplyImpulseAtPosition() ou ApplyAngularImpulse().
Toute modification de propriété physique sur le Workspace qui affecterait l'assemblage, y compris :
Un nouveau Constraint est créé avec un Attachment qui est parenté à un BasePart dans l'assemblage.
Toute modification de propriété pour un Constraint avec un Attachment qui est parenté à un BasePart dans l'assemblage.
Les modifications de propriété CurrentAngle pour un Motor qui est connecté à un BasePart dans l'assemblage.
L'assemblage contient un VehicleSeat avec un personnage de joueur assis.
L'assemblage se trouve dans le BlastRadius de l'assemblage Explosion.
Visualisation de débogage
Pendant les tests de jeu, vous pouvez visualiser les états de sommeil d'assemblage en basculant sur parties éveillées à partir du widget Options de visualisation dans le coin supérieur droit de la fenêtre de jeu3D.

Une fois activé, les parties simulées seront définies par leur état de sommeil actuel, avec des parties éveillées définies en rouge, des parties vérification du sommeil définies en orange et des parties dormantes non définies.