Desain untuk kinerja

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Mendesain untuk kinerja berarti mengikuti seperangkat praktik terbaik saat Anda membangun permainan Anda. Dibandingkan dengan menemukan dan memperbaiki masalah kinerja di kemudian hari dalam proses pengembangan, mendesain untuk kinerja lebih awal dapat menghemat banyak waktu dan usaha.

Perangkat tingkat rendah

Perangkat yang lebih rendah, terutama perangkat mobile, memiliki batasan memori yang serius dan rentan terhadap kerusakan akibat kesalahan kehabisan memori (OOM):

  • Jika Anda ingin mendukung perangkat tingkat rendah, pilih setidaknya satu perangkat "baseline", uji permainan Anda di atasnya sepanjang proses pengembangan, dan perhatikan dengan cermat frame rate dan penggunaan memori. Ketika Anda menemukan area bermasalah dalam permainan Anda, gunakan area tersebut untuk mengidentifikasi batas perangkat Anda.

    Misalnya, Anda mungkin menguji permainan dengan statistik debug Render (ShiftF2) dan Summary (ShiftF2) yang diaktifkan. Jika frame rate mulai turun di area yang sangat berantakan, Anda dapat memeriksa angka Draw (scene) dan menentukan bahwa Anda perlu tetap di bawah 1.000 panggilan draw dan 1.000.000 segitiga agar permainan berjalan dengan baik di perangkat baseline Anda.

    Atau Anda bisa memeriksa Developer Console (F9) dan mencatat bahwa penggunaan memori sedikit tinggi kecuali Anda mengaktifkan streaming. Memahami batas perangkat dengan jelas dapat membantu Anda tetap di bawahnya saat Anda terus membangun permainan Anda.

    Permainan Roblox dengan tiga overlay aktif.

  • Emulator perangkat di Roblox Studio berguna untuk memeriksa rasio aspek dan kontrol, tetapi tidak akurat untuk penggunaan memori; ketika Anda menguji permainan di Studio, ia menjalankan server dan klien, sehingga penggunaan memori jauh lebih tinggi.

Secara lebih umum, mengujicoba pada berbagai perangkat dapat membantu Anda memeriksa bahwa permainan sesuai dengan ekspektasi visual dan kinerja Anda pada berbagai level kualitas grafis. Untuk contoh yang lebih terperinci tentang bagaimana Anda dapat memikirkan pengoptimalan permainan Anda untuk perangkat mobile tingkat rendah, lihat Pengoptimalan Pembangunan dan Pemrograman Dunia Nyata.

Streaming dan teleportasi

  • Instance streaming memungkinkan Roblox memuat dan membongkar konten 3D secara dinamis dan merupakan opsi yang bagus untuk sebagian besar tempat, terutama yang lebih besar. Streaming meningkatkan waktu bergabung, mengurangi jejak memori, dan meningkatkan frame rate.

    Misalnya, ketika Anda mengaktifkan Workspace.EnableSLIMAvatars dan mengatur properti LevelOfDetail model dunia Anda ke SLIM, Anda dapat menciptakan dunia dengan ruang sosial dan acara ramai yang tetap tampak ramai sambil menskalakan kemampuan perangkat yang beragam. Untuk informasi lebih lanjut, lihat Tingkatkan kinerja.

  • Pertimbangkan untuk memecah tempat yang besar menjadi lebih banyak tempat yang dapat dikelola dan menggunakan teleportasi untuk memindahkan pemain di antara mereka. Pendekatan ini dapat mengurangi waktu bergabung awal, tetapi memberlakukan waktu bergabung tambahan saat pemain telepon dari tempat ke tempat. Manfaat penggunaan memori bervariasi tergantung pada ukuran tempat dan apakah Anda telah mengaktifkan streaming.

    Bahkan tanpa mempertimbangkan kinerja, Anda mungkin menemukan bahwa memiliki beberapa tempat menyederhanakan proses pengembangan, terutama jika Anda sering menambahkan konten baru ke permainan Anda atau merupakan bagian dari tim yang lebih besar.

Bahan dan duplikasi

  • Bahan bawaan menggunakan jauh lebih sedikit memori daripada tekstur kustom, tetapi mungkin tidak sesuai dengan visi artistik Anda. Cobalah untuk menggunakan bahan kapan pun mungkin untuk menghemat anggaran memori untuk tekstur yang menjadi inti dari permainan Anda.

  • Saat Anda membuat aset, ubah mereka menjadi paket. Membuat paket sebagai bagian dari alur kerja Anda membantu menghindari masalah umum aset duplikat dengan ID yang berbeda, yang dapat merusak kinerja.

  • Ketika Anda menambahkan mesh dan tekstur, gunakan dan gunakan kembali mereka daripada mengimpor salinan duplikat. Dengan mengubah ukuran, memutar, dan menumpuk, Anda dapat menciptakan lingkungan yang kaya dan bervariasi yang memerlukan sangat sedikit panggilan draw. Untuk informasi lebih lanjut, lihat Hapus tekstur duplikat.

Transparansi

  • Hindari nilai transparansi lain selain 0 (terlihat) dan 1 (tidak terlihat). Ketika Anda menggunakan transparansi sebagian, berhati-hatilah untuk menghindari overdraw transparansi tinggi.

Pemrograman

  • Sebisa mungkin, tulis kode berbasis event daripada perhitungan per-frame. Pada 60 FPS, total anggaran untuk setiap frame adalah 16,67 milidetik (ms). Bahkan perhitungan per-frame yang tampaknya kecil dapat menggunakan bagian yang signifikan dari anggaran itu.

  • Temukan cara untuk memecah kode yang berjalan lama menjadi potongan yang lebih dapat dikelola. Jika sepotong kode membutuhkan 100 ms untuk dieksekusi dan Anda menjalankannya setiap frame, permainan Anda hanya dapat berjalan pada 10 FPS. Jika Anda memutuskan untuk hanya menjalankan kode tersebut sekali per detik dalam permainan yang berjalan dengan kecepatan 60 FPS, 59 dari frame Anda tiba setelah 16,67 ms... dan kemudian satu setelah 100 ms, yang menyebabkan stutter yang mengganggu.

    Sebagai gantinya, selidiki bagaimana Anda bisa memecah kode tersebut. Mungkin Anda dapat melakukan 5 ms pekerjaan per frame, menggunakan task.wait(), dan mendapatkan perhitungan yang selesai setiap 20 frame sambil tetap mempertahankan 60 FPS. Multithreading, kadang-kadang disebut Parallel Luau, juga dapat membantu.

  • Gunakan metode RBXScriptConnection:Disconnect() untuk menghentikan fungsi dari dipanggil secara tidak perlu setiap kali event terjadi.

  • Jangan memanggil metode yang sama setiap kali Anda membutuhkan nilai. Panggil metode sekali, simpan nilai tersebut, dan kemudian timpa nanti sesuai kebutuhan.

  • Jangan menyimpan semuanya dalam ReplicatedStorage. Klien memuat semua yang ada dalam kontainer ini. Sebagai gantinya, gunakan ServerStorage untuk apa pun yang tidak perlu diakses klien.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.