Thiết kế cho hiệu suất

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Thiết kế cho hiệu suất có nghĩa là làm theo một số thực tiễn tốt nhất khi bạn xây dựng trò chơi của mình. So với việc tìm kiếm và sửa chữa các vấn đề về hiệu suất sau này trong quá trình phát triển, thiết kế cho hiệu suất từ sớm có thể tiết kiệm cho bạn rất nhiều thời gian và công sức.

Thiết bị cấp thấp

Các thiết bị cấp thấp, đặc biệt là thiết bị di động, có giới hạn lớn về bộ nhớ và rất dễ bị treo do lỗi hết bộ nhớ (OOM):

  • Nếu bạn muốn hỗ trợ các thiết bị cấp thấp, hãy chọn ít nhất một thiết bị "mẫu" cơ bản, kiểm tra trò chơi của bạn trên nó trong suốt quá trình phát triển và chú ý đến tỷ lệ khung hình và mức sử dụng bộ nhớ. Khi bạn tìm thấy các khu vực gặp vấn đề trong trò chơi của mình, hãy sử dụng những khu vực này để xác định giới hạn của thiết bị.

    Ví dụ, bạn có thể kiểm tra một trò chơi với thông số gỡ lỗi Render (ShiftF2) và Summary (ShiftF2) đã được bật. Nếu tỷ lệ khung hình bắt đầu giảm ở một khu vực đông đúc, bạn có thể xem xét các số liệu Draw (scene) và xác định rằng bạn cần giữ dưới 1.000 lần gọi vẽ và 1.000.000 tam giác để trò chơi hoạt động tốt trên thiết bị cơ bản của bạn.

    Hoặc bạn có thể xem xét Developer Console (F9) và ghi lại rằng mức sử dụng bộ nhớ hơi cao trừ khi bạn bật streaming. Có một hiểu biết rõ ràng về giới hạn của thiết bị có thể giúp bạn giữ dưới mức này khi bạn tiếp tục xây dựng trò chơi của mình.

    Một trò chơi Roblox với ba lớp phủ đang hoạt động.

  • Trình mô phỏng thiết bị trong Roblox Studio rất hữu ích để kiểm tra tỷ lệ khung hình và các điều khiển, nhưng không chính xác về mức sử dụng bộ nhớ; khi bạn kiểm tra trò chơi trong Studio, nó chạy máy chủ và khách hàng, nên mức sử dụng bộ nhớ cao hơn nhiều.

Nói chung, kiểm tra trên nhiều thiết bị có thể giúp bạn kiểm tra rằng trò chơi đáp ứng các kỳ vọng về hình ảnh và hiệu suất của bạn ở các mức chất lượng đồ họa khác nhau. Để có một ví dụ chi tiết hơn về cách bạn có thể suy nghĩ về việc tối ưu hóa trò chơi của mình cho thiết bị di động cấp thấp, hãy xem Tối ưu hóa Xây dựng và Lập trình Thực Tế.

Streaming và teleportation

  • Instance streaming cho phép Roblox tải và hủy tải nội dung 3D một cách động và là một lựa chọn tuyệt vời cho hầu hết các địa điểm, đặc biệt là những địa điểm lớn. Streaming cải thiện thời gian tham gia, giảm kích thước bộ nhớ, và tăng tỷ lệ khung hình.

    Ví dụ, khi bạn bật Workspace.EnableSLIMAvatars và đặt thuộc tính LevelOfDetail của mô hình thế giới của bạn thành SLIM, bạn có thể tạo ra những thế giới với không gian xã hội và sự kiện đông đúc vẫn giữ được hình ảnh phong phú trong khi mở rộng trên một loạt các khả năng của thiết bị. Để biết thêm thông tin, hãy xem SLIMCải thiện hiệu suất.

  • Hãy xem xét việc chia nhỏ các địa điểm lớn thành những địa điểm nhỏ hơn và sử dụng teleportation để di chuyển người chơi giữa chúng. Cách tiếp cận này có thể giảm thời gian tham gia ban đầu, nhưng sẽ kéo theo thời gian tham gia bổ sung khi người chơi dịch chuyển từ địa điểm này sang địa điểm khác. Lợi ích về việc sử dụng bộ nhớ khác nhau tùy thuộc vào kích thước của địa điểm và liệu bạn có bật streaming hay không.

    Ngay cả khi bỏ qua các yếu tố hiệu suất, bạn có thể thấy rằng việc có nhiều địa điểm làm đơn giản hóa quá trình phát triển, đặc biệt nếu bạn thường xuyên thêm nội dung mới vào trò chơi của mình hoặc là một phần của một đội ngũ lớn hơn.

Vật liệu và sao chép

  • Các vật liệu tích hợp sử dụng ít bộ nhớ hơn nhiều so với các kết cấu tùy chỉnh, nhưng có thể không khớp với tầm nhìn nghệ thuật của bạn. Hãy cố gắng sử dụng vật liệu bất cứ khi nào có thể để bảo tồn ngân sách bộ nhớ cho các kết cấu trung tâm trong trò chơi của bạn.

  • Khi bạn tạo tài sản, hãy chuyển đổi chúng thành gói. Việc biến gói thành một phần của quy trình làm việc giúp tránh vấn đề phổ biến về tài sản trùng lặp với các ID khác nhau, điều này có thể ảnh hưởng đến hiệu suất.

  • Khi thêm mô hình và kết cấu, hãy sử dụng và tái sử dụng chúng thay vì nhập các bản sao trùng lặp. Bằng cách thay đổi kích thước, xoay và chồng chéo, bạn có thể tạo ra những môi trường phong phú và đa dạng mà yêu cầu rất ít lần gọi vẽ. Để biết thêm thông tin, hãy xem Xóa kết cấu trùng lặp.

Độ trong suốt

  • Tránh các giá trị độ trong suốt khác ngoài 0 (có thể nhìn thấy) và 1 (không nhìn thấy). Khi bạn sử dụng độ trong suốt một phần, hãy đặc biệt cẩn thận tránh độ trong suốt cao.

Lập trình

  • Bất cứ khi nào có thể, hãy viết mã dựa trên sự kiện thay vì các phép tính theo khung hình. Với 60 FPS, ngân sách tổng cho mỗi khung là 16.67 mili giây (ms). Ngay cả các phép tính theo khung hình dường như không đáng kể cũng có thể sử dụng một phần đáng kể của ngân sách đó.

  • Tìm cách để chia nhỏ mã thực hiện dài thành các khối có thể quản lý. Nếu một đoạn mã mất 100 ms để thực hiện và bạn chạy nó mỗi khung hình, trò chơi của bạn chỉ có thể chạy ở 10 FPS. Nếu bạn quyết định chỉ chạy mã đó một lần mỗi giây trong một trò chơi mà thường hoạt động ở 60 FPS, 59 khung hình của bạn đến sau 16.67 ms... và rồi một khung sau 100 ms, điều này gây ra sự giật lag khó chịu.

    Thay vào đó, hãy khám phá cách chia nhỏ mã. Có thể bạn có thể thực hiện 5 ms công việc mỗi khung, sử dụng task.wait(), và có phép tính hoàn thành mỗi 20 khung hình trong khi vẫn duy trì 60 FPS. Đa luồng, đôi khi gọi là Parallel Luau, cũng có thể giúp ích.

  • Sử dụng phương thức RBXScriptConnection:Disconnect() để ngừng các hàm không bị gọi không cần thiết khi sự kiện tiếp theo xảy ra.

  • Đừng gọi cùng một phương thức mỗi khi bạn cần một giá trị. Gọi phương thức một lần, lưu giá trị, và sau đó ghi đè nó sau đó khi cần.

  • Đừng lưu trữ mọi thứ trong ReplicatedStorage. Khách hàng tải mọi thứ nằm trong container này. Thay vào đó, hãy sử dụng ServerStorage cho bất kỳ thứ gì mà khách hàng không cần truy cập.

©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.