Memulai pengembangan game di Unity

Panduan ini menguraikan siklus pengembangan game yang umum. Setelah membaca panduan ini, sebaiknya gunakan juga sebagai referensi.

Saat Anda menggunakan Unity, siklus proses pengembangan terdiri dari tiga fase:

  • Merencanakan dan mendesain
  • Mengembangkan dan menguji
  • Memublikasi dan mengelola

Merencanakan dan mendesain

Pada fase perencanaan dan desain, Anda menentukan cara membangun game. Anda memutuskan cara mengatasi tantangan dalam mengembangkan aplikasi untuk perangkat seluler, serta mengidentifikasi alat dan proses yang akan digunakan dalam pengembangan.

Mendapatkan masukan dari semua anggota tim

Bekerja samalah dengan tim seni, teknik, desain, audio, dan produksi untuk mengidentifikasi dan merekam tugas implementasi. Contoh:

  • Tim seni dapat membuat anggaran mesh dan tekstur aset untuk karakter dan lingkungan.
  • Engineer dapat menentukan checkpoint memori dan performa untuk pembuatan profil terhadap setiap platform.
  • Desain mungkin merencanakan mekanisme game yang memungkinkan pengalaman.
  • Pakar audio dapat meninjau persyaratan untuk kontinuitas suara antara suara spasial UI, 2D, dan 3D.
  • Produksi mungkin mengomunikasikan persyaratan peluncuran dan menjaga agar tim tetap selaras dan berada di jalur.

Desain untuk perangkat seluler

Pengembangan aplikasi untuk platform seluler memerlukan pertimbangan khusus, seperti:

  • Rasio aspek layar variabel
  • Konsumsi daya
  • Throttling termal dan prosesor
  • Input sentuh
  • Pengembangan lintas platform
  • Graphics API (Vulkan atau OpenGL ES)

Untuk mengetahui detail tentang pertimbangan khusus mendesain untuk perangkat seluler, lihat pengembangan Android di Unity dari Unity, dan Google Play Academy.

Mengembangkan dan menguji

Pada fase pengembangan dan pengujian, Anda akan mem-build game serta melakukan pengujian dan persiapan pra-peluncuran. Lakukan beberapa pengujian internal terbatas di Google Play untuk mempersiapkan Anda memenuhi persyaratan peluncuran. Anda dapat mempertajam strategi deployment dan mengatur aset di Unity berdasarkan sistem Play Asset Delivery dan Addressables Unity.

Bagian berikut menjelaskan alat dan teknik Unity yang dirancang untuk membantu Anda melakukan pengembangan untuk Android.

Render

Rendering adalah proses menggambar aset 3D dan 2D dari scene Unity di layar. Meskipun mesin Unity menangani rendering, penting untuk mempertimbangkan beberapa faktor bagi platform Android.

Tekstur

Tentukan apakah Anda memerlukan ukuran tekstur terbesar atau tidak, berdasarkan perangkat target Anda. Saat membuat profil alokasi memori, tinjau potensi penghematan dari mengubah ukuran tekstur target.

Waktu render frame

Untuk mencegah panas berlebih di perangkat Android, targetkan nilai waktu frame rata-rata di bawah 21 milidetik. Terkadang, seperti selama pemuatan atau pengalaman sinematik pendek, waktu render frame dapat melebihi 21 milidetik, tetapi Anda harus tetap di bawah batas 21 milidetik untuk pengalaman game inti.

Pada platform seluler, VSync paksa akan men-throttle kecepatan frame jika Anda tidak mencapai target minimum. Misalnya, pada update layar 60 Hz, jika Anda tidak mencapai 60 fps, game akan di-throttle ke 30; jika tidak mencapai 30, Anda akan di-throttle ke 15.

Banyak perangkat Android dilengkapi dengan kecepatan refresh layar 60 Hz dan 120 Hz. Pertimbangkan manfaat penargetan waktu render frame yang jauh lebih kecil (target 10 md untuk update 60 Hz, dan 5 md untuk 120 Hz) tanpa menimbulkan risiko akan throttling termal dan pengurasan baterai untuk kecepatan rendering yang lebih tinggi.

Untuk menetapkan kecepatan frame tertentu dalam game di Unity, gunakan Application.targetFrameRate.

Library Frame Pacing Android membantu Anda merender dengan lancar saat aplikasi memerlukan waktu lebih lama untuk menampilkan frame berikutnya daripada yang diminta oleh kecepatan refresh layar. Untuk Unity versi 2021 dan yang lebih baru, mengaktifkan kecepatan frame Android akan menetapkan kecepatan refresh tampilan ke yang paling cocok untuk target kecepatan frame. Hal ini memastikan game tidak memboroskan daya baterai untuk update layar yang tidak perlu.

Untuk mengaktifkan library ini, di Project Settings > Player, di bagian Settings for Android, centang kotak Optimized Frame Pacing.

Kotak dialog yang menampilkan Project Settings > Player Settings > Fame Pacing yang Dioptimalkan
Gambar 1. Optimized Frame Pacing tersedia di bagian Player Settings pada Unity 2019.2 dan yang lebih baru.

Vulkan API

Vulkan adalah API grafis 3D berperforma tinggi lintas platform yang memiliki overhead rendah dibandingkan dengan OpenGL ES. Unity dapat menggunakan Vulkan dengan dua cara berbeda.

API Grafis Otomatis

Anda dapat menggunakan Auto Graphics API dengan Vulkan, tetapi hal ini dapat memiliki perilaku yang berbeda, bergantung pada versi Unity yang telah diinstal. Anda dapat memilih ini dengan membuka Project Settings > Player > Rendering.

Perhatikan hal-hal berikut saat memilih versi Unity yang akan digunakan:

  • Unity 2021.1 dan versi yang lebih lama tidak mendukung Vulkan dengan Auto Graphics API. Unity mencoba menggunakan OpenGL ES 3.2. Jika perangkat tidak mendukung OpenGL ES 3.2, Unity kembali ke OpenGL ES 3.1, 3.0, atau 2.0, dalam urutan tersebut.
  • Unity 2021.2 dan versi yang lebih baru menggunakan Vulkan terlebih dahulu. Jika perangkat tidak mendukung Vulkan, Unity kembali ke OpenGL ES 3.2, 3.1, 3.0, atau 2.0.
Setelan Project > Setelan Pemutar > Rendering > Auto Graphics API
Gambar 2. Setelan Auto Graphics API.

API grafis manual

Atau, Anda dapat mengaktifkan Vulkan secara manual dengan menonaktifkan Auto Graphics API. Jika Anda menggunakan Unity 2021.1 atau versi sebelumnya, ini adalah satu-satunya cara untuk menggunakan Vulkan.

Jika Vulkan diurutkan lebih tinggi dalam daftar ini daripada OpenGL ES, Unity akan mencoba menggunakan Vulkan terlebih dahulu. Jika perangkat tidak mendukung Vulkan, Unity akan berjalan dengan OpenGL ES. Lihat Mulai menggunakan Vulkan untuk mengetahui informasi mendetail tentang Vulkan di Android, seperti cara menggunakan API grafis modern dan mengoptimalkan performa game.

Setelan Project > Setelan Pemutar > Rendering > Graphics API
Gambar 3. Menetapkan API grafis secara manual saat Auto Graphics API dinonaktifkan. Vulkan adalah opsi pertama. Unity kembali ke OpenGL ES 3.0.

Menggambar panggilan

Semua yang ditampilkan di layar dikaitkan dengan satu atau beberapa panggilan gambar. Pada platform seluler, Anda harus mengoptimalkan dan mengurangi jumlah panggilan gambar yang Anda kirim ke unit pemrosesan grafis (GPU).

Bayangkan panggilan gambar mirip dengan mobil yang berbaris di lampu lalu lintas. Setelah lampu berubah menjadi hijau, sejumlah mobil dapat lewat sebelum lampu berubah. Jika lampu berubah menjadi kuning, berarti Anda telah mencapai target waktu render frame (21 milidetik) yang ideal, dan saat lampu berubah menjadi merah, Anda telah mencapai batas waktu render frame 33 milidetik. Apa pun yang sudah melewati yang memengaruhi frame render berikutnya, sehingga kecepatan frame yang dihasilkan lebih rendah dari target 30 fps Anda.

Untuk mengetahui informasi tentang cara meningkatkan performa panggilan gambar dalam game Anda, lihat artikel pengelompokan dari Dukungan Unity.

Bayangan

Panggilan gambar yang melakukan transmisi bayangan bisa menjadi yang paling intensif GPU dan menghabiskan paling waktu GPU bahkan untuk lingkungan yang sederhana. Untuk mengurangi biaya transmisi gambar, lakukan eksperimen dengan menggunakan bayangan keras, bukan bayangan halus. Jika proses ini masih terlalu mahal di GPU untuk perangkat kelas bawah, pertimbangkan untuk menggunakan bayangan blob, bukan bayangan keras.

Tekstur

Format kompresi tekstur yang direkomendasikan untuk tekstur RGB dan RGBA di Android adalah ASTC. Di Unity, opsi kompresi tekstur minimum yang harus Anda gunakan di Android adalah ETC2. Anda dapat kembali ke ETC2 sebagai cadangan dari ASTC di bagian Unity Build Settings.

Temukan daftar lengkap format yang didukung menurut platform dalam dokumentasi Unity di Manual: Format tekstur yang direkomendasikan, default, dan didukung, menurut platform.

Antarmuka pengguna dan rasio aspek

Anda dapat menggunakan alat Device Simulator Unity untuk melihat pratinjau berbagai resolusi layar perangkat, orientasi, dan rasio aspek secara langsung di Unity Editor. Anda dapat beralih antara tampilan Game dan tampilan Simulator Perangkat.

Lihat pratinjau alat ini di bagian Menyimulasikan Game dengan Simulator Perangkat di Unity!.

Gambar 4. Simulator Perangkat yang menjalankan Trivial Kart.

Anda dapat menemukan kode sumber Trivial Kart di repositori games-samples di GitHub.

Anda dapat dengan cepat memverifikasi tata letak dan ketepatan elemen kanvas UI dalam tampilan Simulator Perangkat dengan memilih opsi perangkat di menu drop-down:

Setelan Project > Setelan Pemain > Kecepatan Frame yang Dioptimalkan
Gambar 5. Simulator Perangkat mendukung perubahan perangkat dalam editor, sehingga Anda dapat menemukan masalah desain lebih awal.
Setelan Project > Setelan Pemain > Fame Pacing yang Dioptimalkan
Gambar 6. Centang Aktifkan Paket Pra-rilis sebelum mendownload paket Simulator Perangkat.

Guna mengetahui teknik pengoptimalan UI lainnya untuk Unity, lihat tutorial berikut dari Unity: Mengoptimalkan UI Unity.

Fisika

Mesin Nvidia PhysX dibangun di Unity. Setelan default bisa jadi mahal di perangkat seluler, jadi perhatikan pertimbangan berikut:

  • Pertimbangkan target kecepatan frame Anda dan tetapkan jangka waktu tetap sebagaimana mestinya. Nilai defaultnya adalah 0,02 md atau 50 Hz. Anda dapat meningkatkannya ke 0,03 atau lebih tinggi untuk target 30 fps.
  • Sebaiknya sederhanakan penumbuk mesh dan minimalkan Matriks Tabrakan Lapisan untuk menentukan interaksi antara objek game dari jenis lapisan tertentu.

Untuk informasi tentang setelan fisika dan pengoptimalan untuk game seluler, lihat eBook Mengoptimalkan Game Seluler dari Unity.

Profil

Developer aplikasi sering mengabaikan atau mengabaikan pembuatan profil hingga aplikasi mencapai titik kegagalan kritis. Sebaiknya jadwalkan waktu pembuatan profil khusus ke dalam proses Anda, dan gunakan praktik terbaik berikut:

  • Identifikasi poin-poin penting selama pengembangan saat Anda dapat mengalokasikan waktu pembuatan profil, bukan menyesuaikannya secara acak.
  • Simpan snapshot profil untuk digunakan dengan Unity Profile Analyzer.
  • Buat profil game Anda di perangkat target untuk mendapatkan gambaran akurat tentang performa game pada tahap pengembangan saat ini.
  • Membuat profil berbagai bagian game.
  • Membuat profil cara pemain memainkan game. (Jangan membuat profil game hanya saat game dalam status tidak ada aktivitas atau di layar jeda.)
  • Buat profil dalam mode berkelanjutan setelah game berjalan beberapa saat untuk membantu menemukan masalah throttling yang mungkin Anda alami saat perangkat seluler panas.

Anda dapat menggunakan alat pembuatan profil berikut secara terpisah atau dalam kombinasi.

  • Unity Profiler Unity Profiler adalah alat analisis performa yang terintegrasi sepenuhnya dan dapat dijalankan terhadap kode Anda di Unity Editor dan terhubung ke perangkat Android mandiri yang menjalankan build mode pengembangan.

  • Android GPU Inspector Dengan Android GPU Inspector (AGI), Anda dapat melakukan proses debug tingkat frame. AGI juga menganalisis layanan sistem, termasuk penghitung GPU, CPU, memori, baterai, dan GPU.

Untuk mengetahui detail tentang pembuatan profil game di Unity, tonton video Pengantar pembuatan profil di Unity atau baca Panduan utama untuk membuat profil game Unity, keduanya dari Unity.

Pengelolaan memori

Proses Android membagikan memori yang tersedia di perangkat target. Anda harus membuat profil penggunaan memori saat perangkat pengujian target memiliki resource memori kosong yang cukup. Lakukan pengujian memori secara konsisten dalam game sehingga Anda dapat membandingkan sesi dan tren penggunaan memori dengan tepat.

Saat Anda mengerjakan skrip yang ditulis dalam C#, berhati-hatilah saat menggunakan string, perbandingan string, dan alokasi objek terkait string (seperti file JSON untuk setelan game). Keduanya menghasilkan alokasi memori yang sering dan dapat berkontribusi pada fragmentasi.

Pertimbangkan untuk menggunakan class StringBuilder untuk urutan manipulasi string yang besar, bukan penyambungan string yang tepat (seperti panggilan fungsi "this" + "is" + "a" + "bad" + "ide" versus panggilan fungsi StringBuilder.Concat()).

Untuk mengetahui informasi selengkapnya tentang string, lihat String dan teks dalam dokumentasi Unity.

Mengevaluasi resource teks TextAsset dan JSON berdasarkan jenis ScriptableObject preferensial. ScriptableObjects menangani penyimpanan data lintas-scene secara efisien dan memungkinkan modifikasi waktu Editor-ke-Putar.

Untuk diskusi tentang menggunakan alternatif dari handle JSON default untuk pengoptimalan seluler, lihat artikel Pengoptimalan tersembunyi dalam game jaringan di Hutch.

Gunakan Memory Advice API untuk menentukan seperti apa penggunaan memori Anda saat runtime. API menampilkan indikator lampu sorot untuk penggunaan memori tinggi, normal, dan rendah. Anda dapat berlangganan indikator untuk mendapatkan informasi terbaru atau melakukan polling secara langsung untuk mengetahui status saat ini. Saat Anda mendapatkan sinyal merah, pertimbangkan untuk mengurangi kumpulan objek game atau cache. Sertakan konteks ini dalam telemetri game selama operasi langsung dan peninjauan metrik performa setelah peluncuran.

Untuk mempelajari lebih dalam tentang organisasi memori di perangkat Android dan cara kerja Unity dengannya, tonton Memahami penggunaan memori Android (dari Google I/O '18). Video ini akan membahas jenis-jenis masalah memori dan kapan low memory killer terjadi.

Pembersihan sampah memori

Pembersihan sampah memori di lingkungan memori terkelola membersihkan fragmen memori yang tidak terpakai dan dapat didaur ulang untuk aplikasi. Ikuti praktik terbaik pembersihan sampah memori untuk menghindari alokasi resource memori yang tidak perlu.

Misalnya, buat kumpulan objek game, bukan menggunakan alokasi on demand (GameObject.Instantiate). Untuk kumpulan besar, pertimbangkan mengalokasikan lebih dari beberapa frame untuk mengurangi risiko game tidak responsif di perangkat Android level entri.

Pertimbangkan cuplikan kode berikut untuk coroutine sederhana yang dipanggil dari awal Perilaku MonoBehour:

// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
  while (enabled) {
    yield return new WaitForSeconds(1.0f);
    // Some intermittent function check
  }
}

// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
  while (enabled) {
    yield return waitForSecond;
    // Some other intermittent function
  }
}

Anda dapat mengedit file template MonoBehaviour untuk menghapus fungsi stub Start() dan Update() default, sehingga Anda tidak meninggalkan fungsi kosong secara tidak sengaja selama pengembangan.

Untuk ringkasan urutan eksekusi peristiwa MonoBehaviour, lihat Urutan eksekusi untuk fungsi peristiwa dalam dokumentasi Unity. Untuk mempelajari pengelolaan memori lebih lanjut, lihat kursus Pengelolaan Memori di Unity.

Untuk tips pengoptimalan performa game seluler, lihat Mengoptimalkan performa game seluler: Tips tentang pembuatan profil, memori, dan arsitektur kode dari engineer terbaik Unity.

Penggabungan prefab

Lonjakan waktu render frame CPU hampir sepenuhnya disebabkan oleh pembuatan instance Prefab selama gameplay. Pertimbangkan untuk melakukan prapenyiapan kumpulan objek untuk proyektil, musuh yang dapat di-spawn, dan efek visual sebelum memasuki gameplay untuk mengurangi atau menghilangkan lonjakan CPU startup. Anda dapat menyebarkan pengoptimalan tambahan ke beberapa "frame inisialisasi" selama urutan pemuatan atau pengantar dalam scene.

Anda dapat menemukan banyak aset penggabungan pihak ketiga di Unity Asset Store yang terkait dengan pengelolaan penggabungan objek game. Anda juga dapat membuatnya sendiri. Lihat Pengantar Penggabungan Objek di Unity Belajar.

Pengiriman aset

Ada batasan ukuran aplikasi saat pertama kali di-deploy ke Google Play. Bergantung pada ukuran dan sifat game, Anda mungkin memerlukan beberapa atau semua resource game (model karakter, lingkungan, elemen UI, dan sebagainya) agar pemain dapat merasakan pengalaman yang Anda inginkan.

Anda dapat menggunakan layanan Play Asset Delivery (PAD) untuk mengelola aset yang diperlukan game pada waktu penginstalan, ikuti cepat, atau on demand. Unity Asset Bundle terintegrasi untuk mendukung PAD, dan Anda dapat menggunakan alat ini untuk menentukan elemen mana yang akan dikirim.

Addressable

Menyiapkan resource dinamis – seperti prefab, tekstur, dan file suara – pada runtime bukan lagi operasi yang kompleks jika Anda menyiapkan dan meninjau sistem penamaan Addressables. Aset yang dapat ditangani memisahkan cara Anda mengatur konten, mulai dari cara mem-build dan memuat konten. Sistem Addressables menggantikan folder Resource dan Paket Aset untuk menyederhanakan cara Anda mereferensikan aset dan memuatnya saat runtime.

Sebagai contoh, lihat Project demo menggunakan paket Addressables di GitHub. Untuk mengetahui detail tentang pengembangan Addressables, lihat Addressable Asset System di Blog Unity.

Tata letak aset Addressable memiliki kelebihan dan kekurangan jika menggabungkan terlalu sedikit atau terlalu banyak aset ke dalam paket umum. Untuk mempelajari pengelolaan konten dengan Addressables lebih lanjut, lihat Menyederhanakan pengelolaan konten dengan Addressables.

Anda dapat menyiapkan demo mandiri dan bereksperimen dengan mode akses agar merasa nyaman dengan sistem Addressables. Anda juga dapat melihat project open source BuildLayout Explorer untuk Unity 2019.3 dan yang lebih baru, serta memeriksa laporan buildlayout.txt yang dihasilkan oleh Addressables.

Aset untuk Chop Chop, sebuah Project Open Unity, dikemas menggunakan sistem Addressables untuk semua pemuatan dan penghapusan muatan. Lihat Mengemas konten dengan Addressable Assets | Open Project Devlog untuk mengetahui panduan struktur dan penyiapan konfigurasi paket Addressables.

Dalam project Chop Chop, satu-satunya scene yang dimuat secara default, scene Inisialisasi, dikonfigurasi untuk menggunakan AssetReferences, bukan link langsung ke aset dalam project (adegan, prefab, dan sebagainya).

Kode sumber untuk Unity Open Project: Chop Chop tersedia di GitHub. Meskipun project ini tidak lagi dalam pengembangan, repo dan dokumentasi git masih tersedia.

Plugin pihak ketiga

Jika Anda menggunakan plugin pihak ketiga, seperti yang ada di Unity Asset Store, pastikan Anda meninjau folder dan menghapus aset yang tidak diperlukan dari folder Resource. Selama proses build, Unity mengumpulkan semua aset yang disertakan dalam folder Resource dan memaketkannya dalam satu paket yang dapat diakses pada runtime. Hal ini dapat menambah penggelembungan pada paket akhir, dan sering kali tidak diperlukan.

Untuk menemukan semua folder resource dengan cepat, telusuri Resources di panel Project. Kemudian, Anda dapat memilih masing-masing bagian untuk mengidentifikasi isinya dan apakah diperlukan untuk game Anda.

Gambar 7. Mungkin ada beberapa folder Resources yang mengintai di folder yang didownload dari Unity Asset Store. Bersihkan data tersebut agar tidak dipaketkan dalam paket aplikasi Anda.

Memublikasi dan mengelola

Jika sudah siap meluncurkan game seluler, tentukan target rilis Anda, cara melakukan pengujian alfa dan beta, serta cara memantau dan melacak performa setelah peluncuran.

Menganalisis masukan dari rilis terbatas

Anda dapat meluncurkan aplikasi ke audiens terbatas dan ditargetkan dan melakukan uji beta dalam skala yang lebih besar, atau mengaktifkan game Anda untuk ketersediaan penuh di semua pasar. Dengan rilis terbatas, Anda dapat menyesuaikan performa aplikasi berdasarkan audiens live yang lebih luas dan kumpulan perangkat.

Misalnya, Anda dapat menggunakan Android Performance Tuner untuk Unity dan Google Analytics untuk Unity untuk mendapatkan insight tentang performa aplikasi dan tren pemain, yang dapat digunakan tim pengembangan Anda untuk meningkatkan dan mengirim update. Anda juga dapat menggunakan data analisis untuk merencanakan sekuel atau game terkait dalam genre serupa.

Pengujian alfa dan beta

Setelah menyiapkan profil aplikasi di Konsol Google Play, Anda dapat menyiapkan build pengujian alfa dan beta publik dan mendistribusikannya ke audiens terbatas untuk peninjauan pra-peluncuran. Dengan meluncurkan ke audiens terbatas, Anda dapat mengatasi masalah akhir dengan kumpulan perangkat yang lebih besar dan mengumpulkan masukan awal yang dapat direspons sebelum dirilis secara global.

Build Unity Anda didistribusikan melalui Android App Bundle. Untuk mengetahui informasinya, lihat Manual: Mengirim ke Google Play dari Unity, yang juga menjelaskan perubahan dari file APK ke format AAB.

Memantau dan melacak

Selama fase LiveOps dan distribusi game, Anda dapat menggunakan Android Vitals untuk membantu melacak masalah performa di perangkat yang mungkin tidak dapat Anda akses selama pengembangan dan pengujian. Untuk mengetahui detailnya, tonton Yang baru untuk game di Jangkauan dan perangkat serta Android vitals.

Sering kali tim pengembangan yang lebih besar memiliki pipeline telemetri game yang unik dan kustom yang menyediakan metrik terkait performa perangkat. Jangan lupa untuk memanfaatkan Android Performance Tuner (APT) dan plugin Unity yang sesuai untuk bergabung melalui metrik bergabung dengan kecepatan frame, fidelitas grafis, waktu pemuatan, dan pengabaian pemuatan. Ikuti panduan langkah demi langkah dalam Mengintegrasikan Android Performance Tuner ke dalam game Unity.

Siklus proses game Anda tidak berhenti setelah ditayangkan. Memantau, mempertahankan, dan merespons performa dan masukan sangat penting untuk pengguna yang puas, ulasan positif, dan adopsi akhir game Anda di semua pasar.