การออกแบบเพื่อประสิทธิภาพ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

การออกแบบเพื่อประสิทธิภาพหมายถึงการปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดเพียงไม่กี่ข้อ ขณะคุณสร้าง เกมของคุณ เมื่อเปรียบเทียบกับการหาข้อบกพร่องและแก้ไขปัญหาด้านประสิทธิภาพในภายหลังในกระบวนการพัฒนา การออกแบบเพื่อประสิทธิภาพตั้งแต่เนิ่นๆ สามารถช่วยให้คุณประหยัดเวลาและความพยายามได้มาก

อุปกรณ์ระดับต่ำ

อุปกรณ์ระดับต่ำ โดยเฉพาะอุปกรณ์มือถือ มีข้อจำกัดด้านหน่วยความจำที่รุนแรงและมีแนวโน้มที่จะเกิดการชนเนื่องจากข้อผิดพลาดขาดหน่วยความจำ (OOM):

  • หากคุณต้องการสนับสนุนอุปกรณ์ระดับต่ำ ให้เลือกอุปกรณ์ "พื้นฐาน" อย่างน้อยหนึ่งรุ่น, ทดสอบเกมของคุณบนอุปกรณ์นั้น ตลอดกระบวนการพัฒนาและใส่ใจกับอัตราเฟรมและการใช้หน่วยความจำอย่างใกล้ชิด ขณะที่คุณพบพื้นที่ปัญหาในเกมของคุณ ให้นำพื้นที่นั้นมาใช้ระบุขีดจำกัดของอุปกรณ์ของคุณ

    ตัวอย่างเช่น คุณอาจทดสอบเกมด้วยสถิติการดีบัก Render (ShiftF2) และ Summary (ShiftF2) ที่เปิดอยู่ หากอัตราเฟรมเริ่มลดลงในพื้นที่ที่ยุ่งเหยิงโดยเฉพาะ คุณสามารถตรวจสอบตัวเลข Draw (scene) และกำหนดว่าคุณต้องอยู่ต่ำกว่า 1,000 การเรียกวาดและ 1,000,000 สามเหลี่ยมเพื่อให้เกมทำงานได้ดีบนอุปกรณ์พื้นฐานของคุณ

    หรือคุณอาจตรวจสอบ Developer Console (F9) และสังเกตว่าการใช้หน่วยความจำค่อนข้างสูงเว้นแต่คุณจะเปิดใช้งาน streaming การมีความเข้าใจที่ชัดเจนเกี่ยวกับขีดจำกัดของอุปกรณ์จะช่วยให้คุณอยู่ภายใต้ขีดจำกัดเหล่านั้นขณะที่คุณสร้างเกมของคุณต่อไป

    เกม Roblox ที่มีการซ้อนทับสามรายการเปิดอยู่

  • โปรแกรมจำลองอุปกรณ์ใน 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 สำหรับสิ่งที่ไคลเอนต์ไม่ต้องการเข้าถึง

©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ