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

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