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

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

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

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

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

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

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

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

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

  • อีมูเลเตอร์อุปกรณ์ใน Roblox Studio มีประโยชน์สำหรับการตรวจสอบอัตราส่วนภาพและการควบคุม แต่ไม่แม่นยำในเรื่องการใช้งานหน่วยความจำ; เมื่อคุณทดสอบเกมใน Studio มันจะรันทั้งเซิร์ฟเวอร์และไคลเอนต์ ดังนั้นการใช้งานหน่วยความจำจะสูงขึ้นมาก

โดยทั่วไปแล้ว, การทดสอบบนอุปกรณ์ที่หลากหลาย สามารถช่วยให้คุณตรวจสอบว่าเกมตรงตามความคาดหวังด้านภาพและประสิทธิภาพในระดับคุณภาพกราฟิกที่แตกต่างกัน สำหรับตัวอย่างรายละเอียดเกี่ยวกับวิธีที่คุณอาจคิดเกี่ยวกับการปรับปรุงประสิทธิภาพเกมของคุณสำหรับอุปกรณ์มือถือระดับต่ำ ดูที่ การสร้างและการปรับแต่งในโลกจริง.

สตรีมและการโยกย้าย

  • การสตรีมอินสแตนซ์ ให้ Roblox โหลดและปลดโหลดเนื้อหาสามมิติได้อย่างไดนามิกและเป็นตัวเลือกที่ยอดเยี่ยมสำหรับสถานที่ส่วนใหญ่ โดยเฉพาะสถานที่ขนาดใหญ่ การสตรีมปรับปรุงเวลาการเข้าร่วม ลดการใช้หน่วยความจำ และเพิ่มอัตราเฟรม

    ยกตัวอย่าง, เมื่อคุณเปิดใช้งาน Workspace.EnableSLIMAvatars และตั้งค่าคุณสมบัติ LevelOfDetail ของโมเดลโลกของคุณเป็น SLIM, คุณสามารถสร้างโลกด้วยพื้นที่สังคมและกิจกรรมที่คนเยอะซึ่งยังคงดูมีชีวิตชีวาในขณะที่ปรับขนาดข้ามขีดความสามารถของอุปกรณ์ที่หลากหลาย สำหรับข้อมูลเพิ่มเติม ดูที่ SLIM และ ปรับปรุงประสิทธิภาพ.

  • พิจารณาแบ่งสถานที่ขนาดใหญ่ให้เป็นสถานที่ที่จัดการได้มากขึ้นและใช้ การโยกย้าย เพื่อนำผู้เล่นไปยังสถานที่ต่าง ๆ วิธีนี้สามารถลดเวลาเข้าร่วม เริ่มต้น, แต่จะกำหนดให้มีเวลาเข้าร่วมเพิ่มเติมเมื่อผู้เล่นเดินทางระหว่างสถานที่ ผลประโยชน์ต่อการใช้งานหน่วยความจำจะแตกต่างกันไปตามขนาดของสถานที่และว่าคุณได้เปิดใช้งานการสตรีมหรือไม่

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

วัสดุและการทำซ้ำ

  • วัสดุในตัวใช้หน่วยความจำน้อยกว่าภาพพื้นผิวที่กำหนดเองอย่างมาก แต่ไม่อาจตรงตามวิสัยทัศน์ศิลปะของคุณได้ พยายามใช้วัสดุเมื่อเป็นไปได้เพื่อการอนุรักษ์งบประมาณหน่วยความจำสำหรับภาพพื้นผิวที่มีความสำคัญต่อเกมของคุณ

  • เมื่อคุณสร้างทรัพย์สิน ให้แปลงเป็น แพ็คเกจ การทำให้แพ็คเกจเป็นส่วนหนึ่งของกระบวนการทำงานของคุณช่วยหลีกเลี่ยงปัญหาทั่วไปของทรัพย์สินที่ซ้ำกันด้วย ID ที่แตกต่างกัน ซึ่งอาจทำให้ประสิทธิภาพลดลง

  • เมื่อคุณเพิ่มเมชและภาพพื้นผิว ให้ใช้และใช้ซ้ำแทนที่จะนำเข้าสำเนาที่ซ้ำกัน โดยการปรับขนาด หมุน และซ้อนกัน คุณสามารถสร้างสภาพแวดล้อมที่หลากหลายและน่าสนใจซึ่งต้องการคำสั่งวาด draw calls น้อยมาก สำหรับข้อมูลเพิ่มเติม ดูที่ ลบภาพพื้นผิวที่ซ้ำกัน.

ความโปร่งใส

  • หลีกเลี่ยงค่าโปร่งใสที่ไม่ใช่ 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 เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ