Thiết kế cho hiệu suất có nghĩa là tuân thủ 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 và khắc phục các vấn đề về hiệu suất sau trong quá trình phát triển, thiết kế cho hiệu suất sớm có thể giúp bạn tiết kiệm 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ó những hạn chế nghiêm trọng về bộ nhớ và dễ bị sự cố do lỗi 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ị "cơ sở", 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ốc độ khung hình và mức sử dụng bộ nhớ. Khi bạn tìm thấy các khu vực vấn đề trong trò chơi của mình, hãy sử dụng những khu vực đó để xác định giới hạn của thiết bị của bạn.
Ví dụ, bạn có thể kiểm tra một trò chơi với các thông số gỡ lỗi Render (ShiftF2) và Tóm tắt (ShiftF2) được bật. Nếu tốc độ khung hình bắt đầu giảm trong một khu vực đông đúc, bạn có thể kiểm tra các số liệu Vẽ (cảnh) và xác định rằng bạn cần phải giữ dưới 1.000 lệnh vẽ và 1.000.000 tam giác để trò chơi chạy tốt trên thiết bị cơ sở của bạn.
Hoặc bạn có thể kiểm tra Bảng điều khiển Nhà phát triển (F9) và ghi chú 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 thiết bị có thể giúp bạn giữ dưới chúng khi bạn tiếp tục xây dựng trò chơi của mình.

Trình giả lập thiết bị trong Roblox Studio hữu ích để kiểm tra tỷ lệ khung hình và điều khiển, nhưng không chính xác cho mức sử dụng bộ nhớ; khi bạn kiểm tra một trò chơi trong Studio, nó chạy máy chủ và máy khách, do đó mức sử dụng bộ nhớ cao hơn đáng kể.
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 phù hợp với 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ó ví dụ chi tiết hơn về cách bạn có thể suy nghĩ về tối ưu hóa trò chơi của mình cho các thiết bị di động cấp thấp, hãy xem Tối ưu hóa Xây dựng và Kịch bản Thế giới Thực.
Streaming và teleportation
Streaming instance cho phép Roblox tải và gỡ tải nội dung 3D một cách động và là lựa chọn tuyệt vời cho hầu hết các địa điểm, đặc biệt là các địa điểm lớn hơn. Streaming cải thiện thời gian tham gia, giảm mức sử dụng bộ nhớ và tăng tốc độ khung hình.
Ví dụ, khi bạn kích hoạt Workspace.EnableSLIMAvatars và đặt thuộc tính LevelOfDetail của các mô hình thế giới của bạn thành SLIM, bạn có thể tạo ra các thế giới với không gian xã hội và các sự kiện đông đúc mà vẫn giữ được sự đông đúc về mặt hình ảnh trong khi mở rộng trên nhiều khả năng thiết bị. Để biết thêm thông tin, hãy xem Cả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 dễ quản lý 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 lại áp đặt thêm thời gian tham gia khi người chơi teleport từ địa điểm này sang địa điểm khác. Lợi ích về mứ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 không xem xét các yếu tố hiệu suất, bạn có thể thấy rằng có nhiều địa điể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 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 văn bản tùy chỉnh, nhưng có thể không phù hợ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 văn bản trung tâm của 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. Làm cho các gói trở thành một phần của quy trình làm việc của bạn 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 bạn thêm mesh và texture, 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 lên nhau, bạn có thể tạo ra các môi trường phong phú, đa dạng mà yêu cầu rất ít lệnh vẽ. Để biết thêm thông tin, hãy xem Xóa các texture trùng lặp.
Độ trong suốt
- Tránh các giá trị độ trong suốt khác ngoài 0 (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 vẽ mờ cao độ trong suốt.
Lập trình
Bất cứ khi nào có thể, hãy viết mã dựa trên sự kiện hơn là các phép tính theo khung hình. Tại 60 FPS, ngân sách tổng cho mỗi khung hình là 16,67 mili giây (ms). Ngay cả các phép tính nhỏ theo khung hình dường như 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ã chạy lâu thành các khối quản lý được. Nếu một đoạn mã mất 100 ms để thực thi 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 chạy ở 60 FPS, 59 khung hình của bạn sẽ đến sau 16,67 ms... và sau đó một khung hình sau 100 ms, điều này gây ra một sự gián đoạn khó chịu.
Thay vào đó, hãy điều tra cách bạn có thể chia nhỏ mã. Có thể bạn có thể thực hiện 5 ms công việc mỗi khung hình, sử dụng task.wait(), và có được phép tính đã hoàn thành mỗi 20 khung hình trong khi vẫn duy trì được 60 FPS. Đa luồng, đôi khi được gọi là Parallel Luau, cũng có thể giúp ích.
Sử dụng phương thức RBXScriptConnection:Disconnect() để ngăn chặn các hàm được gọi không cần thiết mỗi khi một sự kiện được kích hoạt.
Đừ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 thiết.
Đừng lưu mọi thứ trong ReplicatedStorage. Máy khách tải tất cả những gì có trong container này. Thay vào đó, hãy sử dụng ServerStorage cho bất kỳ thứ gì mà máy khách không cần truy cập.