Każdy zespół w silniku Roblox odpowiada pojedynczemu ciału sztywnemu. Pozycja i prędkość każdego ciała sztywnego opisują, gdzie się znajduje i jak szybko się porusza, a jednym z głównych zadań silnika jest aktualizacja pozycji i prędkości każdego zespołu.
Zespoły mogą być ze sobą połączone przy użyciu ograniczeń mechanicznych i ograniczeń ruchu, aby tworzyć mechanizmy takie jak samochody czy samoloty. W miarę jak liczba zespołów i ograniczeń w mechanizmie rośnie, czas potrzebny na symulację mechanizmu również rośnie. Na szczęście ten wzrost jest kompensowany, gdy system snu stwierdza, że silnik może pominąć symulację nieruchomych zespołów.
Stany snu
Każdy zespół może znajdować się w jednym z trzech stanów: wybudzony, śpiący lub sprawdzający sen.
Wybudzony
Wybudzony zespół się porusza lub przyspiesza, dlatego jest symulowany. Zespoły wchodzą w ten stan z sytuacji opisanych w śpiący i sprawdzający sen, a także z dodatkowych sytuacji wybudzających.
Śpiący
Śpiący zespół ani się nie porusza, ani nie przyspiesza, dlatego nie jest symulowany.
Uznawane za nieruchome jest skład zespołu przez sprawdzenie jego prędkości liniowej i prędkości obrotowej. Jeśli jego prędkość liniowa jest mniejsza niż próg Prędkości Liniowej a jego prędkość obrotowa jest mniejsza niż próg Prędkości Obrotowej, zespół jest uznawany za nieruchomy.
W niektórych przypadkach samo sprawdzanie braku ruchu mogłoby spowodować, że zespół błędnie wejdzie w stan śpiący. Na przykład, jeśli piłka zostanie rzucona w górę, jej prędkość zbliża się do zera, gdy osiąga maksymalną wysokość, przez co może stać się kandydatem do snu i nigdy nie spaść z powrotem. Aby radzić sobie z takimi sytuacjami, silnik uznaje zespół za przyspieszający, jeśli jego przyspieszenie liniowe lub przyspieszenie obrotowe są większe niż progi Przyspieszenia Liniowego i Przyspieszenia Obrotowego, odpowiednio, i zapobiega zasypianiu zespołu.
Sprawdzający sen
Nieruchomy zespół, który dzieli ograniczenie z co najmniej jednym wybudzonym sąsiednim zespołem, przechodzi w stan sprawdzania snu i nie jest symulowany. Na każdym kroku świata, zespół sprawdzający sen ocenia, czy:
- Jego przyspieszenie liniowe jest większe niż próg Wybudzania Przyspieszenia Liniowego.
- Jego przyspieszenie obrotowe jest większe niż próg Wybudzania Przyspieszenia Obrotowego.
- Prędkość liniowa sąsiedniego zespołu jest większa niż próg Prędkości Liniowej Sąsiedniego.
- Prędkość obrotowa sąsiedniego zespołu jest większa niż próg Prędkości Obrotowej Sąsiedniego.
Jeśli którekolwiek z tych warunków jest prawdziwe, lub w przypadku jakiejkolwiek z dodatkowych sytuacji wybudzających, zespół sprawdzający sen wchodzi w stan wybudzenia.
Wskazówki dotyczące progów
Poniższa tabela zawiera różne progi prędkości i przyspieszenia używane do określenia, czy zespół się porusza lub przyspiesza.
| Próg | Wartość | Zmiana stanu |
|---|---|---|
| Prędkość Liniowa | 0.33 studs/s | wybudzony ⟩ śpiący |
| Prędkość Obrotowa | 0.42 studs/s | wybudzony ⟩ śpiący |
| Przyspieszenie Liniowe | 0.24 studs/s² | wybudzony ⟩ śpiący |
| Przyspieszenie Obrotowe | 0.24 studs/s² | wybudzony ⟩ śpiący |
| Prędkość Liniowa Sąsiedniego | 0.48 studs/s | sprawdzający sen ⟩ wybudzony |
| Prędkość Obrotowa Sąsiedniego | 0.59 studs/s | sprawdzający sen ⟩ wybudzony |
| Wybudzanie Przyspieszenia Liniowego | 16.9 studs/s² | wybudzony ⟩ śpiący |
| Wybudzanie Przyspieszenia Obrotowego | 16.9 studs/s² | wybudzony ⟩ śpiący |
Progi prędkości i przyspieszenia obrotowego odzwierciedlają prędkość i przyspieszenie punktu znajdującego się na sferze ograniczającej zespołu (sferze, która obejmuje wszystkie części w zespole), który porusza się sztywno z zespołem.
Osiągane złącza
Czasami programiści chcą poruszać części bardzo powoli za pomocą osiąganego złącza, ograniczenia, które stosuje siłę lub ruch, aby napędzać połączone części, na przykład HingeConstraint używając Motor. Aby wspierać te scenariusze, zespoły połączone z osiąganymi złączami używają surowszego progu prędkości snu. To opóźnia moment, w którym te zespoły zapadają w sen, pozwalając na powolny, kontrolowany ruch bez prethystizującego zasypiania przez system fizyki.
Poniższe są uznawane za osiągane złącza:
| Ograniczenie | Konfiguracja | Wymagane właściwości różne od zera |
|---|---|---|
| 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 |
Dodatkowe sytuacje wybudzające
Oprócz sytuacji opisanych w sprawdzaniu snu i śpiący, zespół wchodzi w stan wybudzenia, gdy:
Koliduje z innym zespołem poruszającym się szybciej niż 1 studs/s.
Jakakolwiek właściwość związana z fizyką dowolnej BasePart znajdującej się w zespole zmienia się, w tym:
Impuls różny od zera jest stosowany do dowolnej BasePart znajdującej się w zespole za pomocą ApplyImpulse(), ApplyImpulseAtPosition(), lub ApplyAngularImpulse().
Jakiekolwiek zmiany właściwości związane z fizyką na Workspace, które wpływają na zespół, w tym:
Tworzone jest nowe Constraint z Attachment, które jest nadrzędne dla BasePart znajdującego się w zespole.
Jakiekolwiek zmiany właściwości dla Constraint z Attachment, które jest nadrzędne dla BasePart znajdującego się w zespole.
Właściwość CurrentAngle zmienia się dla Motor, który jest podłączony do BasePart znajdującego się w zespole.
Zespół zawiera VehicleSeat z siedzącą postacią gracza.
Zespół znajduje się w BlastRadius eksplozji Explosion.
Wizualizacja debugowania
Podczas testowania, możesz wizualizować stany snu zespołów poprzez włączenie Wybudowanych części w widgetcie Opcje Wizualizacji w górnym prawym rogu widoku 3D.

Po włączeniu, symulowane części będą konturami, które reprezentują ich aktualny stan snu, z wybudowanymi częściami konturowymi na czerwono, sprawdzającymi sen częściami konturowymi na pomarańczowo, a śpiącymi częściami bez konturu.