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

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

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

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

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

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

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

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

    เกม Roblox ที่มีการแสดงผลสามแบบที่เปิดใช้งาน

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

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