Roblox Motorundaki her bir montaj tek bir katı cismi temsil eder. Her katı cismin konumu ve hızı, nerede bulunduğunu ve ne kadar hızlı hareket ettiğini belirtir; motorun ana görevlerinden biri de her montajın konumlarını ve hızlarını güncellemektir.
Montajlar, arabalar veya uçaklar gibi mekanizmalar oluşturmak için mekanik kısıtlamalar ve hareket kısıtlamaları ile birbirine bağlanabilir. Bir mekanizmada montajların ve kısıtlamaların sayısı arttıkça, mekanizmanın simülasyonu için gereken zaman da artar. Neyse ki, uyku sistemi, motorun hareket etmeyen montajların simülasyonunu atlayabileceğini belirlediğinde bu artışı dengelemektedir.
Uyku durumu
Her montaj, üç durumdan birinde olabilir: uyanık, uykuda veya uyku kontrolü.
Uyanık
Uyanık bir montaj hareket ediyor veya ivmeleniyor ve bu nedenle simüle ediliyor. Montajlar, uykuda ve uyku kontrolü durumlarından ve ek uyandırma durumları olarak belirtilen durumlardan bu duruma geçer.
Uykuda
Uykuda bir montaj, ne hareket ediyor ne de ivmeleniyor, bu nedenle simüle edilmiyor.
Bir montajın hareket etmiyor olduğu, doğrusal hızı ve dönmesel hızı kontrol edilerek belirlenir. Eğer doğrusal hızı Doğrusal Hız eşiğinden daha küçükse ve dönmesel hızı da Dönmesel Hız eşiğinden daha küçükse, montaj hareket etmiyor olarak kabul edilir.
Bazı durumlarda, sadece hareket etmeme kontrolü, bir montajın yanlışlıkla uyku durumuna girmesine neden olabilir. Örneğin, bir topu dik bir şekilde yukarı atarsanız, hızı maksimum yüksekliğine ulaşırken sıfıra yaklaşır, bu da onun uyku durumuna geçmesinin bir adayı olur ve asla geri düşmez. Bu tür durumları ele almak için, motor, bir montajın doğrusal ivmesi veya dönmesel ivmesi Doğrusal İvme ve Dönmesel İvme eşiklerinden daha büyükse, montajın uykuya geçmesini engeller.
Uyku kontrolü
En az bir uyanık komşu montaj ile bir kısıtlama paylaşan hareket etmeyen bir montaj, uyku kontrolü durumuna geçer ve simüle edilmez. Her dünya adımında, bir uyku kontrolü montajı aşağıdaki koşulları kontrol eder:
- Doğrusal ivmesi, Uyandırma Doğrusal İvmesi eşiğinden büyük mü.
- Dönmesel ivmesi, Uyandırma Dönmesel İvmesi eşiğinden büyük mü.
- Komşu bir montajın doğrusal hızı, Komşu Doğrusal Hız eşiğinden büyük mü.
- Komşu bir montajın dönmesel hızı, Komşu Dönmesel Hız eşiğinden büyük mü.
Bu koşullardan herhangi biri doğruysa veya ek uyandırma durumları altında, uyku kontrolü montajı uyanık durumuna geçer.
Eşik referansı
Aşağıdaki tablo, bir montajın hareket edip etmediğini veya ivmelenip ivmelenmediğini belirlemek için kullanılan çeşitli hız ve ivme eşiklerini sağlar.
| Eşik | Değer | Durum değişikliği |
|---|---|---|
| Doğrusal Hız | 0.33 stud/sn | uyanık ⟩ uykuda |
| Dönmesel Hız | 0.42 stud/sn | uyanık ⟩ uykuda |
| Doğrusal İvme | 0.24 stud/sn² | uyanık ⟩ uykuda |
| Dönmesel İvme | 0.24 stud/sn² | uyanık ⟩ uykuda |
| Komşu Doğrusal Hız | 0.48 stud/sn | uyku kontrolü ⟩ uyanık |
| Komşu Dönmesel Hız | 0.59 stud/sn | uyku kontrolü ⟩ uyanık |
| Uyandırma Doğrusal İvme | 16.9 stud/sn² | uyanık ⟩ uykuda |
| Uyandırma Dönmesel İvme | 16.9 stud/sn² | uyanık ⟩ uykuda |
Dönmesel hız ve ivme eşikleri, montajın içerisinde yer alan parçaların tamamını içeren montaj sınır küresinde (bir montajdaki tüm parçaları içeren bir küre) bulunan bir noktanın hızını ve ivmesini yansıtır.
Hareketli bağlantılar
Bazen geliştiriciler, bağlı parçaları harekete geçirmek için çok yavaş bir hareketli bağlantı kullanmak isterler; bu, bağlı parçalara kuvvet veya hareket uygulayan bir kısıtlamadır, örneğin, HingeConstraint kullanarak Motor. Bu senaryoları desteklemek için, hareketli bağlantılara bağlı montajlar, daha katı bir uyku hızı eşiği kullanır. Bu, bu montajların uykuya geçişini geciktirir, yavaş, kontrollü hareketin fizik sisteminin onları prematüre uykuya geçirmesini önler.
Aşağıdakiler hareketli bağlantılar olarak kabul edilir:
| Kısıtlama | Konfigürasyon | Gerekli sıfır olmayan özellikler |
|---|---|---|
| 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 |
Ek uyandırma durumları
Uyku kontrolü ve uykuda olarak belirtilen durumlara ek olarak, bir montaj uyanık durumuna geçer:
Diğer bir montajla 1 stud/sn'den daha hızlı çarpıştığında.
Montaj içindeki herhangi bir BasePart'ın herhangi bir fizikle ilgili özelliği değiştiğinde, bunlar dahil:
Montaj içindeki herhangi bir BasePart'a, ApplyImpulse(), ApplyImpulseAtPosition() veya ApplyAngularImpulse() aracılığıyla sıfırdan büyük bir darbe uygulandığında.
Montaja etki edecek şekilde Workspace üzerinde herhangi bir fiziksel özelliğin değiştiğinde, bunlar dahil:
Montaj içindeki bir BasePart'a ebeveyn olan bir Attachment ile yeni bir Constraint oluşturulduğunda.
Montaj içindeki bir BasePart'a ebeveyn olan bir Attachment ile bağlantılı bir Constraint için herhangi bir özellik değiştiğinde.
Montaj içindeki bir BasePart ile bağlanan bir Motor için CurrentAngle nesnesinin değiştiğinde.
Montaj bir oturmuş oyuncu karakterine sahip bir VehicleSeat içerdiğinde.
Montaj, bir Explosion'un BlastRadius içinde olduğunda.
Hata ayıklama görselleştirmesi
Oyun testi sırasında, 3D görüntü alanının sağ üst köşesindeki Görselleştirme Seçenekleri aracından Uyanık parçalar'ı etkinleştirerek montaj uyku durumlarını görselleştirebilirsiniz.

Etkinleştirildiğinde, simüle edilen parçalar mevcut uyku durumuna göre çizgilerle işaretlenir; uyanık parçalar kırmızı, uyku kontrolü parçalar turuncu, ve uykuda parçalar ise çizgisiz kalır.