كل تجميع في محرك Roblox يتوافق مع جسم صلب واحد. تصف موضع وسرعة كل جسم صلب مكانه وسرعته، وأحد المهام الأساسية للمحرك هي تحديث مواضع وسرعات كل تجميع.
يمكن ربط التجميعات معًا باستخدام قيود ميكانيكية وقيود المحرك لتشكيل آليات مثل السيارات أو الطائرات. مع زيادة عدد التجميعات والقيود في آلية ما، يزيد الوقت المطلوب لمحاكاة الآلية أيضًا. ولحسن الحظ، يتم تعويض هذه الزيادة عندما يحدد نظام النوم أن المحرك يمكنه تخطي محاكاة التجميعات غير المتحركة.
حالات النوم
يمكن أن يكون كل تجميع في واحدة من ثلاث حالات: مستيقظ، نائم، أو يتحقق من النوم.
مستيقظ
التركيب المستيقظ يتحرك أو يتسارع، وبالتالي يتم محاكاته. تدخل التجميعات هذه الحالة من الحالات الموضحة في النوم والتحقق من النوم، بالإضافة إلى حالات الاستيقاظ الإضافية.
نائم
التجميع النائم لا يتحرك ولا يتسارع، وبالتالي لا يتم محاكاته.
يتم تحديد أن التجميع غير متحرك من خلال فحص سرعته الخطية وسرعته الدورانية. إذا كانت سرعته الخطية أقل من عتبة السرعة الخطية وعشرته الدورانية أقل من عتبة السرعة الدورانية، فإن التجميع يُعتبر غير متحرك.
في بعض الحالات، قد يؤدي الفحص البسيط عن عدم الحركة إلى دخول التجميع بشكل غير صحيح إلى حالة النوم. على سبيل المثال، إذا تم رمي كرة رأسًا إلى الأعلى، فإن سرعتها تقترب من الصفر عندما تصل إلى أقصى ارتفاع لها، مما يجعلها مرشحة للنوم ولا تعود إلى الأسفل. للتعامل مع مثل هذه الحالات، يعتبر المحرك أن التجميع يتسارع إذا كانت تسارعه الخطي أو تسارعه الدوراني أكبر من التسارع الخطي والتسارع الدوراني على التوالي، وسيتجنب وضع التجميع في حالة النوم.
التحقق من النوم
التجميع غير المتحرك الذي يشارك قيدًا مع تجميع جارٍ واحد على الأقل مستيقظ يُدخل في حالة التحقق من النوم ولا يُمحاكي. في كل خطوة في العالم، يتحقق التجميع الذي يتفقد النوم مما إذا كان:
- تسارعه الخطي أكبر من عتبة استيقاظ التسارع الخطي.
- تسارعه الدوراني أكبر من عتبة استيقاظ التسارع الدوراني.
- سرعة التجميع الجار أكبر من عتبة سرعة الجار الخطية.
- سرعة التجميع الجار (الدورانية) أكبر من عتبة سرعة الجار الدورانية.
إذا كان أي من هذه الشروط صحيحًا، أو في أي من حالات الاستيقاظ الإضافية، يدخل التجميع الذي يتفقد النوم في حالة مستيقظ.
مرجع العتبة
توفر الجدول التالي مختلف عتبات السرعة والتسارع المستخدمة لتحديد ما إذا كان التجميع يتحرك أو يتسارع.
| العتبة | القيمة | تغيير الحالة |
|---|---|---|
| السرعة الخطية | 0.33 studs/s | مستيقظ ⟩ نائم |
| السرعة الدورانية | 0.42 studs/s | مستيقظ ⟩ نائم |
| التسارع الخطي | 0.24 studs/s² | مستيقظ ⟩ نائم |
| التسارع الدوراني | 0.24 studs/s² | مستيقظ ⟩ نائم |
| سرعة الجار الخطية | 0.48 studs/s | التحقق من النوم ⟩ مستيقظ |
| سرعة الجار الدورانية | 0.59 studs/s | التحقق من النوم ⟩ مستيقظ |
| تسارع الاستيقاظ الخطي | 16.9 studs/s² | مستيقظ ⟩ نائم |
| تسارع الاستيقاظ الدوراني | 16.9 studs/s² | مستيقظ ⟩ نائم |
تعكس عتبات السرعة والتسارع الدورانية السرعة والتسارع لنقطة تقع على كرة التجميع المحيطية (كرة تحتوي على جميع الأجزاء في التجميع) التي تتحرك بشكل صلب مع التجميع.
المفاصل الحركية
أحيانًا يرغب المطورون في تحريك الأجزاء ببطء شديد باستخدام المفصل الحركي، وهو قيد يطبق قوة أو حركة لتحريك الأجزاء المتصلة، مثل HingeConstraint باستخدام Motor. لدعم هذه السيناريوهات، تستخدم التجميعات المتصلة بالمفاصل الحركية عتبة سرعة نوم أكثر صرامة. يؤخر هذا الوقت الذي تستغرقه هذه التجميعات للسقوط في النوم، مما يسمح بحركة بطيئة ومتحكم بها دون أن يضعها نظام الفيزياء في النوم مبكرًا.
تعتبر المفاصل الحركية كما يلي:
| القيد | التكوين | الخصائص المطلوبة غير الصفرية |
|---|---|---|
| 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 |
حالات الاستيقاظ الإضافية
بالإضافة إلى الحالات الموضحة في التحقق من النوم وnوم، يدخل التجميع في حالة مستيقظ عندما:
يصطدم مع تجميع آخر يتحرك بسرعة أكبر من 1 studs/s.
أي خاصية مرتبطة بالفيزياء لأي BasePart داخل التجميع تتغير، بما في ذلك:
يتم تطبيق تأثير غير صفر على أي BasePart داخل التجميع عبر ApplyImpulse(), ApplyImpulseAtPosition(), أو ApplyAngularImpulse().
أي تغييرات على خصائص مرتبطة بالفيزياء على Workspace قد تؤثر على التجميع، بما في ذلك:
يتم إنشاء قيد جديد مع Attachment التي تم توصيلها إلى BasePart داخل التجميع.
أي تغييرات على الخصائص لقيد Constraint مع Attachment التي تم توصيلها إلى BasePart داخل التجميع.
يتم تغيير خاصية CurrentAngle لقيد Motor المتصلة بـ BasePart داخل التجميع.
يحتوي التجميع على VehicleSeat مع شخصية لاعب جالسة.
يكون التجميع ضمن BlastRadius لتفجير Explosion.
تصور التصحيح
أثناء اختبار اللعبة، يمكنك تصور حالات النوم للتجميع من خلال التبديل إلى أجزاء مستيقظة في ويدجت خيارات التصور في الزاوية العليا اليمنى من نافذة العرض ثلاثي الأبعاد.

بمجرد تفعيله، ستتم إحاطة الأجزاء المحاكية بحالتها الحالية للنوم، مع إحاطة أجزاء مستيقظة باللون الأحمر، وإحاطة أجزاء التحقق من النوم باللون البرتقالي، وأجزاء نائمة غير محاطة.