ตัวจัดการกำหนดเวลาภารกิจ สร้างความสอดคล้องระหว่างภารกิจที่ทําในแต่ละเฟรมในขณะที่เกมกําลังดําเนินการ แม้ว่าเกมจะถูกระงับก็ตาม ภารกิจเหล่านี้รวมถึงการตรวจจับการใส่ข้อมูลของผู้เล่น, การแอนิเมชั่นตัวละคร, การอัปเดตการจำลองฟิสิกส์, และการดำเนินการให้สคริปต์ในสถานะ task.wait() อีกครั้ง
แม้ว่าจะมีงานหลายอย่างที่ดำเนินการอยู่ แต่ตัวจัดกำหนดเวลางานอาจถูกโหลดเกินไปได้ โดยเฉพาะอย่างยิ่งในสถานการณ์ต่อไปนี้:
- ใช้อุปกรณ์ตัวละครที่กําหนดเองหรือสเครื่องกระจายสัญญาณที่กําหนดเอง
- แอนิเมชั่นชิ้นส่วนด้วยตัวคุณเอง (แทนที่จะใช้ Animator )
- ขึ้นอยู่กับฟิสิกส์ที่แม่นยำมาก
- สร้างวัตถุซ้ำอย่างสม่ำเสมอ
กรอบ
กรอบ เป็นหน่วยของโลจิสติกเกมที่ทำงานเสร็จ เป็นหน่วยของเกมโลจิสติกที่ทำงานแต่ละกรอบควรทํางานได้อย่างมีประสิทธิภาพ ส่งผลให้มีจํานวนเฟรมต่อวินาทีมากขึ้น และประสบการณ์ผู้เล่นที่ราบรื่นมากขึ้น
เรียกใช้บริการ
วิธีที่ตรงไปตรงมาที่สุดในการเพิ่มภารกิจเกมแบบเฟรมต่อเฟรมคือผ่านสมาชิกต่อไปนี้ของ RunService :
ลําดับความสําคัญของตัวจัดการเวลา
ตัวจัดการกำหนดเวลาภารกิจจะจัดหมวดหมู่และเสร็จสิ้นภารกิจตามลำดับต่อไปนี้บางภารกิจอาจไม่ทำงานในกรอบ ในขณะที่บางภารกิจอาจทำงานหลายครั้ง

แนวทางที่ดีที่สุด
เพื่อสร้างเกมที่มีประสิทธิภาพด้วยความคิดในใจ กำลังติดตาม:
อย่าเชื่อมโยง/ผูกฟังก์ชันกับขั้นตอนการเรนเดอร์ เว้นแต่จําเป็นอย่างยิ่ง: เฉพาะภารกิจที่ต้องทำหลังจากใส่แต่ก่อนที่จะเรนเดอร์จะต้องทำในลักษณะดังกล่าวเช่นการเคลื่อนไหวของกล้องสำหรับการควบคุมอย่างเคร่งครัดเกี่ยวกับคำสั่งซื้อใช้ BindToRenderStep() แทน PreRender
จัดการสถานะทางกายภาพอย่างระมัดระวัง: PreSimulation เกิดขึ้น ก่อน ฟิสิกส์ในขณะที่ PostSimulation เกิดขึ้น หลังจาก ฟิสิกส์ดังนั้นโลจิกเกมที่มีผลต่อสถานะฟิสิกส์จึงควรทำใน PreSimulation เช่นการตั้งค่า Velocity ของชิ้นส่วนในทางกลับกัน โลจิสติกของเกมที่พึ่งพาหรือตอบสนองต่อสถานะฟิสิกส์ควรจัดการใน PostSimulation เช่นอ่าน Position ของชิ้นส่วนเพื่อตรวจจับเมื่อพวกเขาเข้าสู่โซนที่กำหนด
การเปลี่ยนแปลงของ Motor6D ควรทำในอีเวนต์ PreSimulation: หากคุณไม่ทำ Animators จะเขียนทับการเปลี่ยนแปลงในกรอบถัดไปแม้ไม่มี Animator , PreSimulation เป็นอีเวนต์ Luau ครั้งสุดท้ายที่ยิงก่อนที่ Motor6D.Transform จะถูกนำไปใช้กับตําแหน่งส่วน