Mỗi tập hợp trong Roblox Engine tương ứng với một đối tượng cứng duy nhất. Vị trí và vận tốc của mỗi đối tượng cứng mô tả nơi nó được đặt và tốc độ di chuyển của nó, và một trong những nhiệm vụ chính của động cơ là cập nhật vị trí và vận tốc của từng tập hợp.
Các tập hợp có thể được kết nối với nhau bằng ràng buộc cơ học và ràng buộc di chuyển để tạo ra các cơ chế như ô tô hoặc máy bay. Khi số lượng tập hợp và ràng buộc trong một cơ chế tăng lên, thời gian cần để mô phỏng cơ chế cũng tăng lên. May mắn thay, sự gia tăng này được bù đắp khi hệ thống ngủ xác định rằng động cơ có thể bỏ qua việc mô phỏng các tập hợp không di chuyển.
Trạng thái ngủ
Mỗi tập hợp có thể ở một trong ba trạng thái: thức, ngủ, hoặc kiểm tra ngủ.
Thức
Một tập hợp thức đang di chuyển hoặc tăng tốc, và do đó được mô phỏng. Các tập hợp vào trạng thái này từ các tình huống được nêu trong ngủ và kiểm tra ngủ, cũng như các tình huống thức bổ sung.
Ngủ
Một tập hợp ngủ không di chuyển và không tăng tốc, và do đó không được mô phỏng.
Một tập hợp được xác định là không di chuyển bằng cách kiểm tra vận tốc tuyến tính và vận tốc xoay của nó. Nếu vận tốc tuyến tính của nó nhỏ hơn ngưỡng Vận tốc Tuyến tính và vận tốc xoay của nó nhỏ hơn ngưỡng Vận tốc Xoay, tập hợp được coi là không di chuyển.
Trong một số trường hợp, việc kiểm tra đơn giản xem có di chuyển hay không có thể khiến một tập hợp vào trạng thái ngủ một cách sai lầm. Ví dụ, nếu một quả bóng được ném thẳng lên, vận tốc của nó sẽ tiến gần đến zero khi nó đạt đến độ cao tối đa, khiến nó trở thành một ứng viên để ngủ và không bao giờ rơi xuống. Để xử lý các trường hợp như vậy, động cơ coi một tập hợp đang tăng tốc nếu gia tốc tuyến tính hoặc gia tốc xoay của nó lớn hơn các ngưỡng Gia tốc Tuyến tính và Gia tốc Xoay, tương ứng, và sẽ ngăn tập hợp ngủ.
Kiểm tra ngủ
Một tập hợp không di chuyển chia sẻ một ràng buộc với ít nhất một tập hợp thức láng giềng được đưa vào trạng thái kiểm tra ngủ và không được mô phỏng. Trong mỗi bước thế giới, một tập hợp đang kiểm tra ngủ kiểm tra xem:
- Gia tốc tuyến tính của nó có lớn hơn ngưỡng Gia tốc Tuyến tính Thức hay không.
- Gia tốc xoay của nó có lớn hơn ngưỡng Gia tốc Xoay Thức hay không.
- Vận tốc tuyến tính của một tập hợp láng giềng có lớn hơn ngưỡng Vận tốc Tuyến tính Láng giềng hay không.
- Vận tốc xoay của một tập hợp láng giềng có lớn hơn ngưỡng Vận tốc Xoay Láng giềng hay không.
Nếu bất kỳ điều kiện nào trong số này đúng, hoặc trong bất kỳ tình huống thức bổ sung nào, tập hợp kiểm tra ngủ sẽ vào trạng thái thức.
Tham chiếu ngưỡng
Bảng sau cung cấp các ngưỡng về vận tốc và gia tốc khác nhau được sử dụng để xác định xem một tập hợp có đang di chuyển hoặc tăng tốc hay không.
| Ngưỡng | Giá trị | Thay đổi trạng thái |
|---|---|---|
| Vận tốc Tuyến tính | 0.33 studs/s | thức ⟩ ngủ |
| Vận tốc Xoay | 0.42 studs/s | thức ⟩ ngủ |
| Gia tốc Tuyến tính | 0.24 studs/s² | thức ⟩ ngủ |
| Gia tốc Xoay | 0.24 studs/s² | thức ⟩ ngủ |
| Vận tốc Tuyến tính Láng giềng | 0.48 studs/s | kiểm tra ngủ ⟩ thức |
| Vận tốc Xoay Láng giềng | 0.59 studs/s | kiểm tra ngủ ⟩ thức |
| Gia tốc Tuyến tính Thức | 16.9 studs/s² | thức ⟩ ngủ |
| Gia tốc Xoay Thức | 16.9 studs/s² | thức ⟩ ngủ |
Ngưỡng vận tốc và gia tốc xoay phản ánh vận tốc và gia tốc của một điểm nằm trên hình cầu giới hạn của tập hợp (một hình cầu chứa tất cả các bộ phận trong một tập hợp) mà di chuyển cứng với tập hợp.
Khớp tác động
Đôi khi các nhà phát triển muốn di chuyển các bộ phận rất chậm bằng cách sử dụng một khớp tác động, một ràng buộc áp dụng lực hoặc chuyển động để điều khiển các bộ phận kết nối, chẳng hạn như một HingeConstraint sử dụng Motor. Để hỗ trợ các tình huống này, các tập hợp được kết nối với các khớp tác động sử dụng ngưỡng tốc độ ngủ nghiêm ngặt hơn. Điều này làm chậm thời gian khi các tập hợp đó ngủ, cho phép chuyển động chậm, có kiểm soát mà không bị hệ thống vật lý đưa vào ngủ một cách sớm.
Các khớp tác động sau đây được coi là:
| Ràng buộc | Cấu hình | Các thuộc tính khác không bằng không yêu cầu |
|---|---|---|
| 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 |
Các tình huống thức bổ sung
Ngoài các tình huống được nêu trong kiểm tra ngủ và ngủ, một tập hợp vào trạng thái thức khi:
Nó va chạm với một tập hợp khác di chuyển nhanh hơn 1 studs/s.
Bất kỳ thuộc tính liên quan đến vật lý nào của bất kỳ BasePart nào trong tập hợp thay đổi, bao gồm:
Một xung lực không bằng không được áp dụng cho bất kỳ BasePart nào trong tập hợp thông qua ApplyImpulse(), ApplyImpulseAtPosition(), hoặc ApplyAngularImpulse().
Bất kỳ thay đổi thuộc tính nào liên quan đến vật lý trên Workspace sẽ ảnh hưởng đến tập hợp, bao gồm:
Một Constraint mới được tạo ra với một Attachment mà được cha mẹ hóa vào một BasePart trong tập hợp.
Bất kỳ thay đổi thuộc tính nào cho một Constraint với một Attachment mà được cha mẹ hóa vào một BasePart trong tập hợp.
Thuộc tính CurrentAngle thay đổi cho một Motor được kết nối với một BasePart trong tập hợp.
Tập hợp chứa một VehicleSeat có một nhân vật người chơi ngồi.
Tập hợp nằm trong bán kính nổ của một Explosion.
Hiển thị gỡ lỗi
Trong quá trình kiểm tra chơi, bạn có thể hình dung trạng thái ngủ của tập hợp bằng cách bật Các phần Thức từ widget Tùy chọn Hiển thị ở góc trên bên phải của không gian 3D.

Khi đã bật, các bộ phận được mô phỏng sẽ được đánh dấu bằng trạng thái ngủ hiện tại của chúng, với các phần thức được đánh dấu bằng màu đỏ, các phần kiểm tra ngủ được đánh dấu bằng màu cam, và các phần ngủ không được đánh dấu.