แต่ละ ประกอบ ใน Roblox Engine จะตรงกับ ร่างกายที่แข็ง เพียงร่างเดียว ตำแหน่งและความเร็วของร่างกายที่แข็งแต่ละตัวจะอธิบายว่ามันตั้งอยู่ที่ไหนและเคลื่อนที่เร็วแค่ไหน และหนึ่งในงานหลักของเอนจิ้นคือการอัปเดตตำแหน่งและความเร็วของแต่ละประกอบ
ประกอบสามารถเชื่อมต่อกันด้วย ข้อจำกัดทางกล และ ข้อจำกัดของผู้เคลื่อนที่ เพื่อสร้างกลไกต่างๆ เช่น รถยนต์หรือเครื่องบิน เมื่อจำนวนประกอบและข้อจำกัดในกลไกเพิ่มขึ้น เวลาที่ต้องใช้ในการจำลองกลไกก็จะเพิ่มขึ้นด้วย โชคดีที่การเพิ่มนี้จะถูกชดเชยเมื่อ ระบบการนอนหลับ ระบุว่าเอนจิ้นสามารถข้ามการจำลองประกอบที่ไม่เคลื่อนไหวได้
สถานะการนอนหลับ
ประกอบแต่ละชิ้นสามารถอยู่ในหนึ่งในสามสถานะ: ตื่น, นอนหลับ, หรือ ตรวจสอบการนอนหลับ
ตื่น
ประกอบที่ ตื่น จะเคลื่อนไหวหรือเร่ง และจึงถูกจำลอง ประกอบจะเข้าสู่สถานะนี้จากสถานการณ์ที่ระบุไว้ใน นอนหลับ และ ตรวจสอบการนอนหลับ รวมถึง สถานการณ์การตื่นเพิ่มเติม
นอนหลับ
ประกอบที่ นอนหลับ จะไม่เคลื่อนที่หรือเร่ง และจึงไม่ได้ถูกจำลอง
ประกอบจะถูกกำหนดว่าไม่เคลื่อนที่โดยการตรวจสอบ ความเร็วเชิงเส้น และ ความเร็วเชิงมุม หากความเร็วเชิงเส้นน้อยกว่าขีดจำกัด ความเร็วเชิงเส้น และความเร็วเชิงมุมต่ำกว่าขีดจำกัด ความเร็วเชิงมุม ประกอบจะถือว่าไม่เคลื่อนที่
ในบางกรณี การตรวจสอบการไม่เคลื่อนที่เพียงอย่างเดียวอาจทำให้ประกอบเข้าสู่สถานะการนอนหลับอย่างไม่ถูกต้อง ตัวอย่างเช่น ถ้าลูกบอลถูกขว้างขึ้นไปตรงๆ ความเร็วของมันจะเข้าใกล้ศูนย์เมื่อมันถึงความสูงสูงสุด ทำให้มันเป็นผู้สมัครที่จะนอนหลับและไม่กลับลงมา เพื่อจัดการกับกรณีเช่นนี้ เอนจิ้นจะพิจารณาว่าประกอบกำลังเร่งถ้าความเร่งเชิงเส้นหรือความเร่งเชิงมุมมากกว่าขีดจำกัด ความเร่งเชิงเส้น และ ความเร่งเชิงมุม ตามลำดับ และจะป้องกันไม่ให้ประกอบหลับ
ตรวจสอบการนอนหลับ
ประกอบที่ไม่เคลื่อนที่ซึ่งแชร์ข้อจำกัดกับประกอบเพื่อนบ้านที่ ตื่น อย่างน้อยหนึ่งองค์ประกอบ จะถูกนำเข้าสู่สถานะ ตรวจสอบการนอนหลับ และไม่ได้รับการจำลอง ในแต่ละขั้นตอนของโลก ประกอบที่ตรวจสอบการนอนหลับจะตรวจสอบว่า:
- ความเร่งเชิงเส้น ของมันมากกว่าขีดจำกัด ความเร่งเชิงตื่น
- ความเร่งเชิงมุม ของมันมากกว่าขีดจำกัด ความเร่งเชิงมุมตื่น
- ความเร็วเชิงเส้น ของประกอบเพื่อนบ้านมากกว่าขีดจำกัด ความเร็วเชิงเส้นของเพื่อนบ้าน
- ความเร็วเชิงมุม ของประกอบเพื่อนบ้านมากกว่าขีดจำกัด ความเร็วเชิงมุมของเพื่อนบ้าน
หากเงื่อนไขใดๆ เหล่านี้เป็นจริง หรืออยู่ภายใต้ สถานการณ์การตื่นเพิ่มเติม ประกอบที่ตรวจสอบการนอนหลับจะเข้าสู่สถานะ ตื่น
ขีดจำกัดอ้างอิง
ตารางต่อไปนี้ให้ข้อมูลเกี่ยวกับขีดจำกัดความเร็วและความเร่งต่างๆ ที่ใช้ในการกำหนดว่าประกอบเคลื่อนที่หรือเร่งอยู่หรือไม่
| ขีดจำกัด | ค่า | การเปลี่ยนสถานะ |
|---|---|---|
| ความเร็วเชิงเส้น | 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 |
สถานการณ์การตื่นเพิ่มเติม
นอกเหนือจากสถานการณ์ที่ระบุไว้ใน ตรวจสอบการนอนหลับ และ นอนหลับ ประกอบจะเข้าสู่สถานะ ตื่น เมื่อ:
มันชนกับประกอบอื่นที่เคลื่อนที่เร็วกว่า 1 studs/s
คุณสมบัติที่เกี่ยวข้องกับฟิสิกส์ใดๆ ของ BasePart ในประกอบมีการเปลี่ยนแปลง รวมถึง:
มีแรงผลักดันที่ไม่เป็นศูนย์ถูกนำไปยัง BasePart ใดๆ ภายในประกอบโดยผ่าน ApplyImpulse(), ApplyImpulseAtPosition(), หรือ ApplyAngularImpulse()
คุณสมบัติที่เกี่ยวข้องกับฟิสิกส์ใดๆ มีการเปลี่ยนแปลงใน Workspace ที่จะส่งผลต่อประกอบ รวมถึง:
สร้าง Constraint ใหม่โดยมี Attachment ที่ถูกจัดอยู่ในส่วนของ BasePart ภายในประกอบ
การเปลี่ยนแปลงใดๆ ของคุณสมบัติสำหรับ Constraint ที่มี Attachment ที่ถูกจัดอยู่ในส่วนของ BasePart ภายในประกอบ
คุณสมบัติ CurrentAngle มีการเปลี่ยนแปลงสำหรับ Motor ที่เชื่อมต่อกับ BasePart ภายในประกอบ
ประกอบมี VehicleSeat ที่มีตัวละครผู้เล่นนั่งอยู่
ประกอบอยู่ภายใน BlastRadius ของ Explosion
การแสดงผลการดีบัก
ในระหว่างการทดสอบการเล่น คุณสามารถมองเห็นสถานะการนอนหลับของประกอบโดยการเปิดใช้งาน ประกอบที่ตื่น ใน ตัวเลือกการแสดงผล ที่อยู่ในมุมขวาบนของหน้าต่าง 3D

เมื่อเปิดใช้งาน ส่วนที่ถูกจำลองจะถูกขีดเส้นด้วยสถานะการนอนหลับในปัจจุบันของพวกเขา โดยที่ ตื่น จะถูกขีดเส้นสีแดง, ตรวจสอบการนอนหลับ จะถูกขีดเส้นสีส้ม, และ นอนหลับ จะไม่มีการขีดเส้น