การออกแบบเพื่อประสิทธิภาพหมายถึงการปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดบางประการ เมื่อคุณสร้าง เกมของคุณ เมื่อเปรียบเทียบกับการค้นหาและแก้ไขปัญหาด้านประสิทธิภาพในภายหลังในกระบวนการพัฒนา การออกแบบเพื่อประสิทธิภาพตั้งแต่เนิ่นๆ สามารถช่วยประหยัดเวลาและความพยายามได้มาก
อุปกรณ์ระดับต่ำ
อุปกรณ์ระดับต่ำ โดยเฉพาะอุปกรณ์เคลื่อนที่ มีข้อจำกัดด้านหน่วยความจำอย่างรุนแรงและมีแนวโน้มที่จะเกิดการล่มเนื่องจากข้อผิดพลาดจากหน่วยความจำเต็ม (OOM):
หากคุณต้องการสนับสนุนอุปกรณ์ระดับต่ำ ให้เลือกอุปกรณ์ "พื้นฐาน" อย่างน้อยหนึ่งเครื่อง ทดสอบเกมของคุณบนอุปกรณ์นั้น ตลอดกระบวนการพัฒนา และใส่ใจกับอัตราเฟรมและการใช้หน่วยความจำอย่างใกล้ชิด เมื่อคุณพบพื้นที่ปัญหาในเกมของคุณ ให้ใช้พื้นที่เหล่านั้นเพื่อระบุขีดจำกัดของอุปกรณ์ของคุณ
ตัวอย่างเช่น คุณอาจทดสอบเกมด้วยสถิติการดีบัก Render (ShiftF2) และ Summary (ShiftF2) ที่เปิดใช้งาน หากอัตราเฟรมเริ่มลดลงในพื้นที่ที่มีความยุ่งเหยิงเป็นพิเศษ คุณอาจตรวจสอบตัวเลข Draw (scene) และกำหนดว่าคุณต้องอยู่ต่ำกว่า 1,000 การเรียกวาดและ 1,000,000 สามเหลี่ยมเพื่อให้เกมทำงานได้ดีบนอุปกรณ์พื้นฐานของคุณ
หรือคุณอาจตรวจสอบ Developer Console (F9) และสังเกตว่าการใช้หน่วยความจำสูงเกินไปเล็กน้อย เว้นแต่คุณจะเปิดใช้งาน streaming การมีความเข้าใจที่ชัดเจนเกี่ยวกับขีดจำกัดของอุปกรณ์สามารถช่วยให้คุณอยู่ภายใต้ขีดจำกัดเหล่านั้นเมื่อคุณยังคงสร้างเกมของคุณต่อไป

อีมูเลเตอร์อุปกรณ์ใน Roblox Studio มีประโยชน์สำหรับการตรวจสอบอัตราส่วนภาพและการควบคุม แต่ไม่แม่นยำสำหรับการใช้หน่วยความจำ; เมื่อคุณทดสอบเกมใน Studio มันจะรันเซิร์ฟเวอร์และไคลเอนต์ ดังนั้นการใช้หน่วยความจำจึงสูงกว่ามาก
ระดับคุณภาพกราฟิก
Roblox จะปรับคุณภาพการเรนเดอร์โดยอัตโนมัติตามความสามารถของอุปกรณ์แต่ละเครื่อง ที่ระดับคุณภาพที่ต่ำกว่า เอนจินจะลดฟีเจอร์ต่างๆ เช่น ระยะการวาด แต่แม้ที่ระดับคุณภาพต่ำสุด ระยะการวาดก็ยังอยู่ที่อย่างน้อย 500 สตัด น้ำในภูมิประเทศยังคงโปร่งใสและลำแสงยังคงมีจำนวนส่วนที่ทุกระดับคุณภาพ Roblox จะปรับค่าต่างๆ เหล่านี้อย่างต่อเนื่อง ดังนั้นควรหลีกเลี่ยงการออกแบบตามระยะการวาดที่แน่นอน
- เพื่อดูตัวอย่างเกมของคุณที่ระดับคุณภาพต่างๆ ใน Studio ให้เปิด Studio Settings เลือก Rendering และเปลี่ยน Editor Quality Level ทดสอบภาพของคุณที่ทั้งระดับต่ำสุดและสูงสุด
- หากการเพิ่มระดับคุณภาพไม่เปิดเผยส่วนใดของฉากของคุณ อาจเป็นไปได้ว่าอ็อบเจ็กต์ยังไม่ได้ถูกสตรีมเข้ามา ตรวจสอบการตั้งค่า streaming StreamingTargetRadius
- หลีกเลี่ยงการเปลี่ยนแปลงเอฟเฟกต์ภาพในสคริปต์ตาม UserGameSettings.SavedQualityLevel การทำเช่นนี้ทำให้เอนจินทำงานได้ยากขึ้นในการปรับขนาดโดยอัตโนมัติ
โดยทั่วไปแล้ว การทดสอบบนอุปกรณ์ที่หลากหลาย สามารถช่วยให้คุณตรวจสอบว่าเกมตรงตามความคาดหวังด้านภาพและประสิทธิภาพของคุณที่ระดับคุณภาพกราฟิกต่างๆ สำหรับตัวอย่างที่ละเอียดมากขึ้นเกี่ยวกับวิธีที่คุณอาจคิดเกี่ยวกับการปรับแต่งเกมของคุณสำหรับอุปกรณ์เคลื่อนที่ระดับต่ำ ดูที่ การสร้างและการปรับแต่งในโลกจริง
การสตรีมและการเทเลพอร์ต
Instance streaming ช่วยให้ Roblox โหลดและปลดโหลดเนื้อหา 3D ได้อย่างไดนามิกและเป็นตัวเลือกที่ยอดเยี่ยมสำหรับสถานที่ส่วนใหญ่ โดยเฉพาะสถานที่ขนาดใหญ่ การสตรีมช่วยปรับปรุงเวลาเข้าร่วม ลดขนาดหน่วยความจำ และเพิ่มอัตราเฟรม
ตัวอย่างเช่น เมื่อคุณเปิดใช้งาน Workspace.EnableSLIMAvatars และตั้งค่าคุณสมบัติ LevelOfDetail ของโมเดลโลกของคุณเป็น SLIM คุณสามารถสร้างโลกที่มีพื้นที่สังคมและกิจกรรมที่มีผู้คนหนาแน่นซึ่งยังคงมีลักษณะเป็นภาพที่มีชีวิตชีวาในขณะที่ปรับขนาดไปยังความสามารถของอุปกรณ์ที่หลากหลาย สำหรับข้อมูลเพิ่มเติม ดูที่ SLIM และ ปรับปรุงประสิทธิภาพ
พิจารณาการแบ่งสถานที่ขนาดใหญ่เป็นสถานที่ที่จัดการได้มากขึ้นและใช้ การเทเลพอร์ต เพื่อย้ายผู้เล่นระหว่างสถานที่เหล่านั้น วิธีการนี้สามารถลดเวลาเข้าร่วม เริ่มต้น แต่จะมีเวลาเข้าร่วมเพิ่มเติมเมื่อผู้เล่นเทเลพอร์ตจากสถานที่หนึ่งไปยังอีกสถานที่หนึ่ง ประโยชน์ต่อการใช้หน่วยความจำจะแตกต่างกันไปขึ้นอยู่กับขนาดของสถานที่และว่าคุณได้เปิดใช้งานการสตรีมหรือไม่
แม้จะไม่พิจารณาถึงประสิทธิภาพ คุณอาจพบว่าการมีสถานที่หลายแห่งทำให้กระบวนการพัฒนาง่ายขึ้น โดยเฉพาะหากคุณเพิ่มเนื้อหาใหม่ในเกมของคุณเป็นประจำหรือเป็นส่วนหนึ่งของทีมที่ใหญ่กว่า
วัสดุและการทำซ้ำ
วัสดุในตัวใช้หน่วยความจำน้อยกว่าภาพพื้นผิวที่กำหนดเองมาก แต่ไม่อาจตรงกับวิสัยทัศน์ทางศิลปะของคุณได้ พยายามใช้วัสดุเมื่อเป็นไปได้เพื่อประหยัดงบประมาณหน่วยความจำสำหรับภาพพื้นผิวที่เป็นศูนย์กลางของเกมของคุณ
เมื่อคุณสร้างสินทรัพย์ ให้แปลงเป็น แพ็คเกจ การทำให้แพ็คเกจเป็นส่วนหนึ่งของกระบวนการทำงานของคุณช่วยหลีกเลี่ยงปัญหาทั่วไปของสินทรัพย์ที่ซ้ำกันด้วย ID ที่แตกต่างกัน ซึ่งอาจทำให้ประสิทธิภาพลดลง
เมื่อคุณเพิ่มเมชและภาพพื้นผิว ให้ใช้และนำกลับมาใช้ใหม่แทนการนำเข้าสำเนาที่ซ้ำกัน โดยการปรับขนาด หมุน และซ้อนทับ คุณสามารถสร้างสภาพแวดล้อมที่หลากหลายและมีความซับซ้อนซึ่งต้องการการ เรียกวาด น้อยมาก สำหรับข้อมูลเพิ่มเติม ดูที่ ลบภาพพื้นผิวที่ซ้ำกัน
ความโปร่งใส
- หลีกเลี่ยงค่าความโปร่งใสอื่นนอกจาก 0 (มองเห็นได้) และ 1 (มองไม่เห็น) เมื่อคุณใช้ความโปร่งใสบางส่วน ให้ระมัดระวังเป็นพิเศษเพื่อหลีกเลี่ยง การวาดทับความโปร่งใสสูง
การเขียนสคริปต์
เมื่อเป็นไปได้ ให้เขียนโค้ดที่ขับเคลื่อนด้วยเหตุการณ์แทนการคำนวณต่อเฟรม ที่ 60 FPS งบประมาณรวมสำหรับแต่ละเฟรมคือ 16.67 มิลลิวินาที (ms) แม้การคำนวณต่อเฟรมที่ดูเหมือนเล็กน้อยก็สามารถใช้สัดส่วนที่สำคัญของงบประมาณนั้นได้
ค้นหาวิธีการแบ่งโค้ดยาวๆ ออกเป็นชิ้นที่จัดการได้ หากโค้ดชิ้นหนึ่งใช้เวลา 100 ms ในการดำเนินการและคุณรันมันทุกเฟรม เกมของคุณจะสามารถรันได้เพียง 10 FPS หากคุณตัดสินใจที่จะรันโค้ดเพียงครั้งเดียวต่อวินาทีในเกมที่ทำงานที่ 60 FPS ที่เหลือ 59 เฟรมของคุณจะมาถึงหลังจาก 16.67 ms... และจากนั้นหนึ่งเฟรมหลังจาก 100 ms ซึ่งทำให้เกิดการกระตุกที่น่ารำคาญ
แทนที่จะทำเช่นนั้น ให้ตรวจสอบว่าคุณสามารถแบ่งโค้ดออกได้อย่างไร บางทีคุณอาจทำงาน 5 ms ต่อเฟรม ใช้ task.wait() และมีการคำนวณที่เสร็จสมบูรณ์ทุก 20 เฟรมในขณะที่ยังคงรักษา 60 FPS ไว้ได้ Multithreading ซึ่งบางครั้งเรียกว่า Parallel Luau ก็สามารถช่วยได้เช่นกัน
ใช้เมธอด RBXScriptConnection:Disconnect() เพื่อหยุดฟังก์ชันจากการถูกเรียกใช้งานโดยไม่จำเป็นเมื่อเหตุการณ์เกิดขึ้นในครั้งถัดไป
อย่าเรียกเมธอดเดียวกันทุกครั้งที่คุณต้องการค่า เรียกเมธอดเพียงครั้งเดียว เก็บค่าไว้ และจากนั้นเขียนทับในภายหลังตามความจำเป็น
อย่าเก็บทุกอย่างใน ReplicatedStorage ไคลเอนต์จะโหลดทุกอย่างที่อยู่ในคอนเทนเนอร์นี้ แทนที่จะใช้ ServerStorage สำหรับสิ่งที่ไคลเอนต์ไม่จำเป็นต้องเข้าถึง