Chaque assemblage dans le moteur Roblox correspond à un seul corps rigide. La position et la vitesse de chaque corps rigide décrivent l'endroit où il se trouve et à quelle vitesse il se déplace, et l'une des tâches moteur primaires est de mettre à jour les positions et les vitesses de chaque corps rigide.
Les assemblages peuvent être connectés ensemble avec contraintes mécaniques et contraintes mover pour former des mécanismes tels que des voitures ou des avions. Au fur et à 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, cet décalage est un OFFSET lorsque le système de sommeil détermine que le mote
États de sommeil
Chaque assemblage peut être dans l'un des trois états : veille, vérification de sommeil, ou dors.
Réveillé
Une réveillée assemblée bouge ou accélère, et est donc simulée. Les assemblées entrent dans cet état à partir des situations décrites dans vérification du sommeil et dormir, ainsi que 2>situations de réveil supplémentaires2>.
Vérification du sommeil
Une assemblée non mobile qui partage une contrainte avec au moins un éveillé voisin, est mise dans l'état sleep-checking et n'est pas simulée. À chaque étape de monde, un sleep-checking assemblage vérifie si :
- La déviation de position d'une position voisine est supérieure à la zone de déploiement du voisin.
- La valeur de l'accélération de l'assemblage voisin et de la taille actuelle du pas de temps est supérieure à la valeur de vitesse d'角 et/ou de vitesse linéaire seuil.
Si l'une de ces conditions est vraie, ou sous l'une des situations de réveil supplémentaires, l'assemblage de vérification du sommeil entre dans l'état veille.
Dormir
Une dormir assemblage ne se déplace pas et n'accélère pas, et est donc non simulé.
Une assemblage est déterminée non移动 en vérifiant sa déviation de position , calculée comme la plus grande déviation de la position moyenne du point le plus loin de son centre de masse sur le plus récent ensemble de pas de monde. Si cette déviation est supérieure à la zone de réveil, l'assemblage entre en l'état veille.
Dans certains cas, il suffit de vérifier pour non-mouvement pour provoquer une erreur d'assemblage à entrer incorrectement l'état de sommeil. Par exemple, si une balle est lancée directement vers le haut, sa position ne change presque pas pour un certain nombre de worldsteps alors qu'elle approche sa hauteur maximale, ce qui la rend un candidat pour dormir et ne jamais tomber en arrière. Pour
Référence de seuil
Le tableau suivant fournit les seuils de déplacement et de vitesse utilisés pour déterminer si une assemblage se déplace ou accélère.
seuil | Valeur | Changement d'état |
---|---|---|
Décalage voisin | 0,01 mètres | vérification du sommeil ⟩ réveillé |
Vitesse linéaire du voisin | 0,2 mètre/s | vérification du sommeil ⟩ réveillé |
Vitesse d'angle du voisin | 0,2 radians/s | vérification du sommeil ⟩ réveillé |
Déplacement | 0,001 mètres | dormir >, se réveiller |
Vitesse linéaire | 0,1 mètre/s | dormir >, se réveiller |
Vitesse angulaire | 0,1 radians/s | dormir >, se réveiller |
Situations de réveil supplémentaires
En plus des situations décrites dans sleep-checking et sleeping, une assemblage entre dans l'état 醒来 lorsque :
Il entre en collision avec une autre assemblage.
Toute propriété physique liée à n'importe quelle Class.BasePart dans les modifications d'assemblage, y compris :
Une impulsion non zéro est appliquée à n'importe quelle BasePart dans l'assemblage via ApplyImpulse() , ApplyImpulseAtPosition() ou 1> Class.BasePart:ApplyAngularImpulse()|ApplyAngularImpulse()1> .
Toutes les modifications de propriétés physiques sur la Workspace qui affecteraient l'assemblage, y compris :
Un nouveau Constraint est créé avec un Attachment qui est parenté à un BasePart dans l'assemblage.
Toutes les modifications de propriétés pour un Constraint avec un Attachment qui est parenté à un BasePart dans l'assemblage.
La propriété CurrentAngle change pour un Motor qui est connecté à un BasePart dans l'assemblage.
L'assemblage contient un VehicleSeat avec un personnage de joueur assis.
L'assemblage est dans le BlastRadius de Explosion .
Visualisation de débogage
Pendant le test de jeu, vous pouvez visualiser l'état de sommeil de l'assemblage en basculant sur éveillé les parties dans le widget Options de visualisation dans le coin supérieur droit de la fenêtre de jeu3D.
Une fois activé, les parties simulées seront encerclées par leur état de sommeil actuel, avec 醒 parties encerclées en rouge, sleep-checking parties encerclées en orange et sleeping parties non encerclées.