Ogni assemblaggio nel motore Roblox corrisponde a un singolo corpo rigido . La posizione e la velocità di ciascun corpo rigido descrivono dove si trova e quanto è velocemente in movimento, e una delle principali attività del motore è aggiornare le posizioni e la velocità di ciascun corpo rigido.
Le assemblie possono essere connesse tra loro con vincoli meccanici e vincoli mover per formare meccanismi come auto o aerei. Man mano che il numero di assemblie e vincoli in un meccanismo aumenta, il tempo richiesto per simulare il meccanismo aumenta. Fortunatamente, questo aumento è off-set quando il sistema di riposo determina che il motore può saltare la
Stati di sonno
Ogni build può essere in uno stato di tre: veglia , controllo del sonno , o sonno .
Sveglio
Un'assemblaggio 醒 sta si muove o accelera, e quindi è simulato. Le assemblaggi entrano in questo stato da situazioni descritte in check-sleep e sleep, nonché 1>situazioni di risveglio aggiuntive1>.
Conteggio del sonno
Un'assemblaggio non in movimento che condivide un vincolo con almeno un'assemblaggio sveglio accanto e non è simulato. Nell' stato check-del-sonno, un'assemblaggio check-del-sonno controlla se:
- La deviazione di posizione di un'assemblaggio vicino è maggiore della soglia Neighbor Displacement.
- Il prodotto dell'accelerazione di un'assemblaggio vicina e della dimensione del passo di tempo corrente è maggiore della velocità angolare e/o velocità lineare soglia.
Se una di queste condizioni è vera, o sotto qualsiasi delle condizioni aggiuntive di riavvio, l'assemblaggio di controllo del sonno passa allo stato veglio.
Dormire
Un'assemblaggio dormire non si muove né si accelera e quindi non viene simulato.
Un'assemblaggio è determinato a essere non mobile by checking its posizione deviazione , calculated as the maximum deviation from the average position of the point furthest from its center of mass over the most recent set of worldstep. If this deviazione è maggiore than the Displacement threshold, l'assemblaggio entra in stato 醒 .
In alcuni casi, semplicemente controllando per non-mossa causerebbe un'assemblaggio per entrare in uno stato di riposo in modo errato. Ad esempio, se una palla viene lanciata diritti su, la sua posizione non cambia quasi per un numero di passaggi di linea mentre si avvicina alla sua massima altezza, rendendola quindi un candidato per dormire e non cadere mai
Riferimento Threshold
La seguente tabella fornisce i diversi limiti di spostamento e velocità usati per determinare se un'assemblaggio si sta muovendo o accelerando.
Soglia | Valore | Cambio di stato |
---|---|---|
Spostamento dei vicini | 0,01 pollini | rilevamento del sonno > sveglia |
Velocità lineare del vicino | 0,2 studs/s | rilevamento del sonno > sveglia |
Velocità Angolare del Neighbor | 0,2 radiani/s | rilevamento del sonno > sveglia |
Spostamento | 0,001 pollini | dormire >, svegliare |
Velocità lineare | 0,1 studs/s | dormire >, svegliare |
Velocità Angolare | 0.1 radian/s | dormire >, svegliare |
Situazioni di risveglio aggiuntive
Oltre a situazioni descritte in sleep-checking e sleeping, un'assemblazione entra in stato di veglia quando:
Collide con un'altra installazione.
Qualsiasi proprietà fisica di qualsiasi BasePart all'interno delle modifiche di assemblaggio, tra cui:
Un impulso non zero viene applicato a qualsiasi BasePart all'interno dell'assemblaggio tramite ApplyImpulse() , ApplyImpulseAtPosition() o 1> Class.BasePart:ApplyAngularImpulse()|ApplyAngularImpulse()1> .
Qualsiasi cambiamento di proprietà fisica su Workspace che influenzerebbe l'assemblaggio, tra cui:
Un nuovo Constraint viene creato con un Attachment che è parented a BasePart within theAssembly.
Qualsiasi cambiamento di proprietà per un Constraint con un Attachment che è parented a BasePart within theAssembly.
La proprietà CurrentAngle cambia per un Motor che è connesso a un BasePart all'interno dell'assemblaggio.
L'assemblaggio contiene un VehicleSeat con un personaggio giocatore seduto.
L'assemblaggio è all'interno del BlastRadius di un Explosion .
Visualizzazione della diagnosi
Durante il playtest, puoi visualizzare gli stati di riproduzione attivando parti risvegliate dal widget opzioni di visualizzazione nell'angolo in alto a destra della finestra3D.
Una volta abilitato, le parti simulate saranno contornate dal loro stato di sonno attuale, con 醒 parti contornate in rosso, sleep-checking parti contornate in arancione e sleep parti non contornate.