Ogni assemblaggio in Roblox Engine corrisponde a un singolo corpo rigido .La posizione e la velocità di ciascun corpo rigido descrivono dove si trova e quanto velocemente si muove, e una delle principali attività del motore è aggiornare le posizioni e le velocità di ciascuna assemblaggio.
Le assemblie possono essere connesse insieme a vincoli meccanici e vincoli mover per formare meccanismi come automobili o aerei.Mentre aumenta il numero di assemblaggi e vincoli in un meccanismo, aumenta anche il tempo richiesto per simulare il meccanismo.Fortunatamente, questo aumento viene compensato quando il sistema di sonno determina che il motore può saltare la simulazione delle assemblaggi non in movimento.
Stati di sonno
Ogni assemblaggio può essere in uno dei tre stati: sveglio , controllo del sonno o dormire .
Sveglio
Un'assemblata risvegliata è in movimento o accelerazione e quindi viene simulata.Le assemblie entrano in questo stato da situazioni descritte in controllo del sonno e sonno, nonché situazioni di veglia aggiuntive.
Controllo del sonno
Un'assemblaggio non mobile che condivide una restrizione con almeno una assemblaggio vicina attiva viene messo nello stato di controllo del sonno e non viene simulato.Ad ogni passo del mondo, un'assemblata di controllo del sonno controlla se:
- La deviazione della posizione di un'assemblaggio adiacente è superiore alla soglia Disposizione del vicino.
- Il prodotto dell'accelerazione di un'assemblaggio vicino e dell'attuale dimensione del tempo è maggiore della soglia Velocità angolare del vicino e/o Velocità lineare del vicino.
Se una qualsiasi di queste condizioni è vera, o sotto qualsiasi delle situazioni di veglia aggiuntive , l'assemblaggio di controllo del sonno entra nello stato veglia.
Dormire
Un'assemblaggio di sonno non si muove né si accelera e quindi non viene simulato.
Un'assemblaggio è determinato a essere non mobile controllando la sua deviazione posizione , calcolata come la deviazione massima dalla posizione media del punto più lontano dal suo centro di massa nell'ultimo set di passi mondiali.Se questa deviazione è maggiore della soglia di spostamento Displacement, l'assemblaggio entra nello stato 醒.
In alcuni casi, controllare semplicemente per non movimento causerebbe l'ingresso errato di un'assemblaggio nello stato di riposo.Ad esempio, se una palla viene lanciata direttamente in alto, la sua posizione cambia a malapena per una serie di passi mondiali mentre si avvicina alla sua altezza massima, rendendola un candidato a dormire e mai ricadere.Per gestire tali casi, il motore monitora se il prodotto dell'accelerazione e dell'attuale dimensione del tempo di esecuzione dell'assemblaggio supera la soglia Velocità lineare e/o Velocità angolare.
Riferimento alla soglia
La seguente tabella fornisce i diversi limiti di spostamento e velocità utilizzati per determinare se un'assemblaggio si sta muovendo o accelerando.
Soglia | Valore | Cambio di stato |
---|---|---|
Spostamento del vicino | 0.01 metri | controllo del sonno > sveglio |
Velocità lineare del vicino | 0.2 borchie/s | controllo del sonno > sveglio |
Velocità angolare del vicino | 0,2 radiani/s | controllo del sonno > sveglio |
Disposizione | 0,001 borchie | dormire⟩ sveglio |
Velocità lineare | 0.1 borchie/s | dormire⟩ sveglio |
Velocità angolare | 0,1 radiani/s | dormire⟩ sveglio |
Situazioni di risveglio aggiuntive
Oltre alle situazioni descritte in controllo del sonno e sonno, un'assemblata entra nello stato sveglio quando:
Si scontra con un'altra assemblata.
Qualsiasi proprietà fisicamente correlata di qualsiasi BasePart all'interno dei cambiamenti dell'assemblaggio, tra cui:
Un impulso non zero viene applicato a qualsiasi BasePart all'interno dell'assemblaggio attraverso ApplyImpulse() , ApplyImpulseAtPosition() o ApplyAngularImpulse() .
Qualsiasi modifica delle proprietà correlate alla fisica sul Workspace che influirebbe sull'assemblaggio, tra cui:
Un nuovo Constraint viene creato con un Attachment che è parented a un BasePart all'interno dell'assemblaggio.
Qualsiasi modifica delle proprietà per un Constraint con un Attachment che è parented a un BasePart all'interno dell'assemblaggio.
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 .
Debug visualizzazione
Durante il test di gioco, puoi visualizzare gli stati di sonno di assemblaggio attivando parti sveglie dal widget Opzioni di visualizzazione nell'angolo superiore destro della finestra3D.

Una volta abilitato, le parti simulate saranno delineate dal loro stato di sonno attuale, con parti risvegliate in rosso, parti controllo del sonno in arancione e parti dormenti non delineate.