Setiap kumpulan di dalam Mesin Roblox sesuai dengan satu tubuh kaku.Posisi dan kecepatan masing-masing tubuh kaku menjelaskan di mana lokasinya dan seberapa cepat bergerak, dan salah satu tugas mesin utama adalah untuk memperbarui posisi dan kecepatan masing-masing kumpulan.
Kumpulan dapat terhubung bersama dengan batasan mekanis dan batasan penggerak untuk membentuk mekanisme seperti mobil atau pesawat terbang.Sebagai jumlah assemblies dan keterbatasan dalam mekanisme meningkat, waktu yang diperlukan untuk menyimulasikan mekanisme juga meningkat.Untungnya, peningkatan ini dikompensasikan ketika sistem tidur menentukan bahwa mesin dapat melewati simulasi assemblasi non-bergerak .
Status tidur
Setiap assemblasi dapat berada di salah satu dari tiga negara: bangun , memeriksa tidur , atau tidur .
Bangun
Sebuah assemblasi terbangun bergerak atau mempercepat, dan karena itu disimulasikan.Kumpulan memasuki keadaan ini dari situasi yang dijelaskan dalam memeriksa tidur dan tidur , serta situasi bangun tambahan .
Pemeriksaan tidur
Sebuah kumpulan yang tidak bergerak yang berbagi keterbatasan dengan setidaknya satu bangun kumpulan tetangga ditempatkan ke dalam status pemeriksaan tidur dan tidak disimulasikan.Pada setiap langkah dunia, pengumpulan pemeriksaan tidur memeriksa apakah:
- Deviasi posisi dari asamsi tetangga dari asamsi tetangga lebih besar dari ambang batas Penyebaran Tetangga.
- Produk dari akselerasi dari assemble tetangga dan ukuran langkah waktu saat ini lebih besar dari ambang Neighbor Angular Velocity dan/atau Neighbor Linear Velocity.
Jika salah satu dari kondisi ini benar, atau di bawah salah satu situasi bangun tambahan , kumpulan pemeriksaan tidur memasuki keadaan terjaga.
Tidur
Sebuah assemblasi tidur tidak bergerak atau mempercepat , dan karena itu tidak disimulasikan.
Sebuah assemblasi ditentukan untuk tidak bergerak dengan memeriksa deviasi posisinya , dihitung sebagai deviasi maksimum dari posisi rata-rata dari titik paling jauh dari pusat massanya selama set paling baru dari langkah dunia.Jika kelalaian ini lebih besar dari ambang batas Penyebaran, kumpulan memasuki keadaan terjaga.
Dalam beberapa kasus, hanya memeriksa non-gerakan akan menyebabkan kumpulan masuk ke keadaan tidur dengan cara yang salah.Sebagai contoh, jika bola dilemparkan langsung ke atas, posisinya hampir tidak berubah untuk beberapa langkah dunia saat mendekati ketinggian maksimalnya, sehingga menjadikannya kandidat untuk tidur dan tidak pernah jatuh kembali.Untuk menangani kasus seperti itu, mesin memantau apakah produk dari akselerasi dan langkah waktu saat ini dari kumpulan melebihi ambang batas Kecepatan Linier dan/atau Kecepatan Sudut.
Referensi ambang batas
Tabel berikut memberikan ambang batas penyebaran dan kecepatan yang berbeda yang digunakan untuk menentukan apakah kumpulan bergerak atau mempercepat.
Ambang Batas | Nilainya | Perubahan negara |
---|---|---|
Pengusiran Tetangga | 0,01 stud | memeriksa tidur⟩ terjaga |
Kecepatan Linier Tetangga | 0,2 stud/detik | memeriksa tidur⟩ terjaga |
Kecepatan Sudut Tetangga | 0,2 radian/detik | memeriksa tidur⟩ terjaga |
Penggantian | 0,001 stud | tidur ⟩ bangun |
Kecepatan Linier | 0,1 stud/detik | tidur ⟩ bangun |
Kecepatan Sudut | 0,1 radian/detik | tidur ⟩ bangun |
Situasi bangun tambahan
Selain situasi yang dibahas dalam memeriksa tidur dan tidur, sebuah assembler memasuki keadaan terjaga saat:
Ini bertabrakan dengan asam lain.
Setiap properti fisika terkait dari setiap BasePart dalam perubahan kumpulan, termasuk:
Impuls non-nol diterapkan pada setiap BasePart dalam kumpulan melalui ApplyImpulse() , ApplyImpulseAtPosition() , atau ApplyAngularImpulse() .
Setiap perubahan properti terkait fisika pada Workspace yang akan mempengaruhi pengumpulan, termasuk:
Sebuah baru Constraint dibuat dengan Attachment yang diwarisi ke BasePart dalam kumpulan.
Setiap perubahan properti untuk Constraint dengan Attachment yang diwarisi ke BasePart dalam kumpulan.
Perubahan properti CurrentAngle untuk sebuah Motor yang terhubung ke BasePart dalam kumpulan.
Rakitannya berisi VehicleSeat dengan karakter pemain duduk.
Kumpulan berada dalam BlastRadius dari Explosion .
Debug visualisasi
Selama pengujian permainan, Anda dapat memvisualisasikan status tidur pengumpulan dengan menyalakan bagian terjaga dari widget Opsi Visualisasi di sudut kanan atas tampilan 3D.

Setelah diaktifkan, bagian yang disimulasikan akan diuraikan oleh status tidur mereka saat ini, dengan bagian terbangun bagian yang diuraikan dalam warna merah, bagian pemeriksaan tidur bagian yang diuraikan dalam warna oranye, dan bagian tidur bagian yang tidak diuraikan.