Setiap rangkaian dalam Roblox Engine sesuai dengan satu badan kaku. Posisi dan kecepatan setiap badan kaku menggambarkan di mana ia berada dan seberapa cepat ia bergerak, dan salah satu tugas utama mesin adalah memperbarui posisi dan kecepatan setiap rangkaian.
Rangkaian dapat dihubungkan bersama dengan kendala mekanis dan kendala penggerak untuk membentuk mekanisme seperti mobil atau pesawat terbang. Seiring dengan meningkatnya jumlah rangkaian dan kendala dalam suatu mekanisme, waktu yang diperlukan untuk mensimulasikan mekanisme tersebut juga meningkat. Untungnya, peningkatan ini diimbangi ketika sistem tidur menentukan bahwa mesin dapat melewatkan simulasi rangkaian yang tidak bergerak.
Status tidur
Setiap rangkaian dapat berada dalam salah satu dari tiga status: terjaga, tidur, atau memeriksa tidur.
Terjaga
Rangkaian yang terjaga sedang bergerak atau mempercepat, dan oleh karena itu disimulasikan. Rangkaian memasuki status ini dari situasi yang dijelaskan dalam tidur dan memeriksa tidur, serta situasi bangun tambahan.
Tidur
Rangkaian yang tidur tidak bergerak atau mempercepat, dan oleh karena itu tidak disimulasikan.
Sebuah rangkaian ditentukan tidak bergerak dengan memeriksa kecepatan linier dan kecepatan rotasi-nya. Jika kecepatan liniernya kurang dari ambang batas Kecepatan Linier dan kecepatan rotasinya kurang dari ambang batas Kecepatan Rotasi, rangkaian dianggap tidak bergerak.
Dalam beberapa kasus, hanya memeriksa ketidakgerakan dapat menyebabkan rangkaian secara keliru memasuki status tidur. Misalnya, jika sebuah bola dilempar ke atas, kecepatannya mendekati nol saat mencapai ketinggian maksimum, menjadikannya kandidat untuk tidur dan tidak pernah jatuh kembali. Untuk menangani kasus seperti itu, mesin menganggap sebuah rangkaian sedang mempercepat jika percepatan linier atau percepatan rotasi-nya lebih besar dari ambang batas Percepatan Linier dan Percepatan Rotasi, masing-masing, dan akan mencegah rangkaian tersebut tertidur.
Memeriksa tidur
Sebuah rangkaian yang tidak bergerak dan berbagi kendala dengan setidaknya satu rangkaian terjaga ditempatkan dalam status memeriksa tidur dan tidak disimulasikan. Pada setiap langkah dunia, sebuah rangkaian yang memeriksa tidur memeriksa apakah:
- percepatan linier-nya lebih besar dari ambang batas Bangun Percepatan Linier.
- percepatan rotasi-nya lebih besar dari ambang batas Bangun Percepatan Rotasi.
- kecepatan linier rangkaian tetangga lebih besar dari ambang batas Tetangga Kecepatan Linier.
- kecepatan rotasi rangkaian tetangga lebih besar dari ambang batas Tetangga Kecepatan Rotasi.
Jika salah satu dari kondisi ini benar, atau di bawah salah satu situasi bangun tambahan, rangkaian yang memeriksa tidur memasuki status terjaga.
Referensi ambang
Tabel berikut memberikan berbagai ambang kecepatan dan percepatan yang digunakan untuk menentukan apakah sebuah rangkaian bergerak atau mempercepat.
| Ambang | Nilai | Perubahan status |
|---|---|---|
| Kecepatan Linier | 0.33 studs/s | terjaga ⟩ tidur |
| Kecepatan Rotasi | 0.42 studs/s | terjaga ⟩ tidur |
| Percepatan Linier | 0.24 studs/s² | terjaga ⟩ tidur |
| Percepatan Rotasi | 0.24 studs/s² | terjaga ⟩ tidur |
| Kecepatan Linier Tetangga | 0.48 studs/s | memeriksa tidur ⟩ terjaga |
| Kecepatan Rotasi Tetangga | 0.59 studs/s | memeriksa tidur ⟩ terjaga |
| Percepatan Linier Bangun | 16.9 studs/s² | terjaga ⟩ tidur |
| Percepatan Rotasi Bangun | 16.9 studs/s² | terjaga ⟩ tidur |
Ambang kecepatan dan percepatan rotasi mencerminkan kecepatan dan percepatan dari titik yang terletak pada bola pembatas rangkaian (sebuah bola yang mengandung semua bagian dalam sebuah rangkaian) yang bergerak kaku dengan rangkaian tersebut.
Sendi yang digerakkan
Terkadang pengembang ingin menggerakkan bagian dengan sangat lambat menggunakan sendi yang digerakkan, sebuah kendala yang menerapkan gaya atau gerakan untuk menggerakkan bagian yang terhubung, seperti HingeConstraint menggunakan Motor. Untuk mendukung skenario ini, rangkaian yang terhubung ke sendi yang digerakkan menggunakan ambang kecepatan tidur yang lebih ketat. Ini menunda kapan rangkaian tersebut tertidur, memungkinkan gerakan lambat yang terkontrol tanpa sistem fisika yang terlalu cepat menidurkan mereka.
Berikut adalah yang dianggap sebagai sendi yang digerakkan:
| Kendala | Konfigurasi | Properti non-nol yang diperlukan |
|---|---|---|
| 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 |
Situasi bangun tambahan
Selain situasi yang dijelaskan dalam memeriksa tidur dan tidur, sebuah rangkaian memasuki status terjaga ketika:
Ia bertabrakan dengan rangkaian lain yang bergerak lebih cepat dari 1 studs/s.
Setiap properti terkait fisika dari setiap BasePart dalam rangkaian berubah, termasuk:
Sebuah impuls non-nol diterapkan pada setiap BasePart dalam rangkaian melalui ApplyImpulse(), ApplyImpulseAtPosition(), atau ApplyAngularImpulse().
Setiap perubahan properti terkait fisika pada Workspace yang akan mempengaruhi rangkaian, termasuk:
Sebuah Constraint baru dibuat dengan Attachment yang diparent ke BasePart dalam rangkaian.
Setiap perubahan properti untuk Constraint dengan Attachment yang diparent ke BasePart dalam rangkaian.
Properti CurrentAngle berubah untuk Motor yang terhubung ke BasePart dalam rangkaian.
Rangkaian tersebut mengandung VehicleSeat dengan karakter pemain yang duduk.
Rangkaian tersebut berada dalam BlastRadius dari sebuah Explosion.
Visualisasi debug
Selama pengujian permainan, Anda dapat memvisualisasikan status tidur rangkaian dengan mengaktifkan Bagian Terjaga dari widget Opsi Visualisasi di sudut kanan atas viewport 3D.

Setelah diaktifkan, bagian yang disimulasikan akan digarisbawahi oleh status tidur mereka saat ini, dengan bagian terjaga digarisbawahi dengan warna merah, bagian memeriksa tidur digarisbawahi dengan warna oranye, dan bagian tidur tidak digarisbawahi.