Memulai pengembangan game di Unity

Panduan ini menguraikan siklus pengembangan game umum. Setelah membaca ini panduan ini, Anda dapat menggunakannya sebagai referensi.

Saat Anda bekerja dengan Unity, siklus proses pengembangan terdiri dari tiga fase-fase:

  • Merencanakan dan merancang
  • Mengembangkan dan menguji
  • Publikasikan dan kelola

Merencanakan dan merancang

Dalam fase perencanaan dan desain, Anda menentukan cara membangun game. Anda memutuskan bagaimana mengatasi tantangan pengembangan untuk seluler, dan mengidentifikasi alat dan proses yang digunakan dalam pengembangan.

Mendapatkan masukan dari semua anggota tim

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

  • Tim seni dapat membuat anggaran tekstur aset dan mesh untuk karakter dan lingkungan digital.
  • Teknik mungkin menentukan pos pemeriksaan memori dan kinerja pembuatan profil terhadap setiap platform.
  • Desain mungkin merencanakan mekanisme {i>game<i} yang memungkinkan pengalaman.
  • Pakar audio mungkin meninjau persyaratan untuk kontinuitas suara antara Suara spasial UI, 2D, dan 3D.
  • Produksi mungkin mengomunikasikan persyaratan peluncuran dan menjaga selaras dan di jalur yang benar.

Desain untuk seluler

Pengembangan aplikasi untuk platform seluler melibatkan pertimbangan khusus, seperti:

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

Untuk detail tentang pertimbangan khusus terkait mendesain untuk seluler, lihat Pengembangan Android di Unity dari Unity, dan Google Play Academy.

Mengembangkan dan menguji

Pada fase pengembangan dan pengujian, Anda membangun game, melakukan pengujian, dan persiapan prapeluncuran. Anda melakukan beberapa batasan internal pengujian di Google Play untuk mempersiapkan Anda agar memenuhi persyaratan peluncuran. Anda menyempurnakan strategi deployment dan mengatur aset di Unity berdasarkan Play Asset Delivery dan Unity Addressables yang berbeda.

Bagian berikut ini menjelaskan alat dan teknik Unity yang dirancang untuk membantu mengembangkan aplikasi Android.

Render

Rendering adalah proses menggambar aset 3D dan 2D dari scene Unity Anda di layar. Sementara mesin Unity menangani rendering, sebaiknya pertimbangkan beberapa faktor untuk platform Android.

Tekstur

Tentukan apakah Anda memerlukan ukuran tekstur terbesar, berdasarkan target perangkat. Saat Anda membuat profil alokasi memori, meninjau potensi penghematan dari perubahan target ukuran tekstur.

Waktu render frame

Untuk mencegah panas berlebih di perangkat Android, target waktu render frame dengan nilai rata-rata di bawah 21 milidetik. Kadang-kadang, seperti selama pemuatan atau pengalaman sinematik singkat, waktu render frame Anda dapat melebihi 21 milidetik, tetapi Anda harus tetap berada di bawah 21 minimum milidetik untuk pengalaman game inti.

Pada platform seluler, VSync paksa men-throttle kecepatan frame jika Anda tidak dan mencapai target minimum. Misalnya, pada pembaruan layar 60 Hz, jika Anda tidak menekan 60 fps, game Anda akan dibatasi hingga 30; jika tidak mencapai 30, Anda akan terburu-buru hingga 15.

Banyak perangkat Android dijual 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 mempertaruhkan 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 ketika aplikasi membutuhkan waktu lebih lama untuk menyajikan {i>frame<i} berikutnya daripada yang dibutuhkan oleh kecepatan refresh layar. Untuk Unity versi 2021 dan yang lebih baru, mengaktifkan pengaturan kecepatan frame Android akan menyetel kecepatan refresh layar ke paling cocok untuk kecepatan frame target. Hal ini memastikan game tidak buang daya baterai pada pembaruan tampilan yang tidak perlu.

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

Kotak dialog yang menampilkan Project Settings > Setelan Pemutar > Kecepatan Popularitas yang Dioptimalkan
Gambar 1. Optimized Frame Pacing tersedia di Player Settings di Unity 2019.2 dan yang lebih baru.

Vulkan API

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

API Auto Graphics

Anda dapat menggunakan Auto Graphics API dengan Vulkan, tetapi ini dapat memiliki perbedaan perilaku model bergantung pada versi Unity yang telah Anda instal. Anda dapat memilih ini dengan membuka Project Settings > Pemutar > Rendering.

Ingatlah selalu hal-hal berikut saat memilih versi Unity yang akan gunakan:

  • Unity 2021.1 dan versi yang lebih lama tidak mendukung Vulkan dengan 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 > API Auto Graphics
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. 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. Menyetel API grafis secara manual saat Auto Graphics API dinonaktifkan. Vulkan adalah opsi pertama. Unity akan kembali ke OpenGL ES 3.0.

Menggambar panggilan

Semua yang ditampilkan di layar dikaitkan dengan satu atau beberapa panggilan gambar. Aktif platform seluler, Anda harus mengoptimalkan dan mengurangi jumlah panggilan gambar yang Anda kirim ke {i> graphic processing unit<i} (GPU).

Anggaplah panggilan menggambar serupa dengan mobil yang berbaris di lampu lalu lintas. Setelah lampu berubah menjadi hijau, beberapa mobil bisa lewat sebelum lampu perubahan. Saat lampu berubah menjadi kuning, Anda telah mencapai bingkai target ideal waktu (21 milidetik), dan ketika lampu berubah menjadi merah, Anda telah menekan 33 untuk batas waktu render frame milidetik. Apa pun yang lewat yang mempengaruhi {i>frame<i} 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 pengelompokan dari Dukungan Unity.

Bayangan

Panggilan gambar transmisi bayangan dapat menjadi yang paling intensif GPU dan paling banyak Waktu GPU bahkan untuk lingkungan sederhana. Untuk mengurangi biaya transmisi bayangan menggambar panggilan, bereksperimenlah dengan menggunakan bayangan keras alih-alih lembut. Jika biayanya masih terlalu mahal di GPU untuk perangkat kelas bawah, pertimbangkan untuk bayangan blob, bukan bayangan keras.

Tekstur

Tekstur yang direkomendasikan format kompresi 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 beralih kembali ke ETC2 sebagai cadangan dari ASTC di bagian Unity Build Settings.

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

Antarmuka pengguna dan rasio aspek

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

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

Gambar 4. Simulator Perangkat yang menjalankan Trivial Kart.

Anda dapat menemukan kode sumber Trivial Kart di game-sampel repositori 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 menu:

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

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

Fisika

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

  • Pertimbangkan kecepatan frame target Anda dan tetapkan interval waktu tetap yang sesuai. Defaultnya diatur ke 0,02 md atau 50 Hz. Anda dapat meningkatkannya menjadi 0,03 atau lebih tinggi untuk target 30 fps.
  • Pertimbangkan untuk menyederhanakan penghancur mesh dan meminimalkan tumbukan Lapisan Matriks untuk menentukan interaksi antara objek game dari lapisan tertentu jenis datanya.

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

Profil

Developer aplikasi sering mengabaikan atau mengabaikan pembuatan profil hingga aplikasi mencapai titik kegagalan kritis. Sebaiknya Anda menjadwalkan {i>design sprint<i} waktu pembuatan profil ke dalam proses Anda, dan menggunakan praktik terbaik berikut:

  • Identifikasi poin penting selama pengembangan ketika Anda dapat mengalokasikan pembuatan profil waktu, daripada memasukkannya secara acak.
  • Simpan snapshot profil untuk digunakan dengan Penganalisis Profil Unity.
  • Buat profil game Anda di perangkat target untuk mendapatkan gambaran akurat tentang cara performa game Anda berada pada tahap pengembangan saat ini.
  • Buat profil berbagai bagian game Anda.
  • Buat profil cara pemain memainkan game. (Jangan membuat profil game Anda saja saat dalam keadaan tidak ada aktivitas atau dalam layar dijeda.)
  • Profil dalam mode berkelanjutan setelah game berjalan beberapa saat untuk membantu menemukan masalah throttling yang mungkin Anda temui saat perangkat perangkat itu panas.

Anda dapat menggunakan alat pembuatan profil berikut secara terpisah atau bersama-sama.

  • Unity Profiler Unity Profiler adalah performa yang sepenuhnya terintegrasi analisis yang dapat dijalankan pada kode Anda di Unity Editor dan hubungkan 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 GPU, CPU, memori, baterai, dan GPU penghitung.

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

Manajemen memori

Proses Android berbagi memori yang tersedia pada perangkat target. Anda seharusnya membuat profil penggunaan memori saat perangkat pengujian target memiliki memori bebas yang cukup Google Cloud Platform. Melakukan pengujian memori secara konsisten dalam game agar Anda dapat membandingkan sesi dan tren penggunaan memori dengan tepat.

Ketika Anda bekerja dalam skrip yang ditulis dalam C#, berhati-hatilah dengan penggunaan {i>string<i}, perbandingan string, dan alokasi objek terkait string (seperti JSON file untuk setelan game). Ini menghasilkan alokasi memori yang sering dan bisa berkontribusi pada fragmentasi.

Pertimbangkan untuk menggunakan StringBuilder untuk rangkaian besar manipulasi string, atas penyambungan di tempat {i>string<i} (seperti "ini" + "adalah" + "a" + "buruk" + "ide" versus panggilan fungsi StringBuilder.Concat()).

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

Mengevaluasi resource teks TextAsset dan JSON berdasarkan preferensi Jenis ScriptableObject. ScriptableObjects menangani penyimpanan data lintas adegan secara efisien dan memungkinkan modifikasi waktu Editor-ke-Play.

Untuk diskusi tentang penggunaan alternatif {i>default<i} Nama sebutan channel JSON untuk pengoptimalan seluler, lihat artikel Pengoptimalan tersembunyi di game jaringan di Hutch.

Gunakan Memory Advice API untuk menentukan seperti apa penggunaan memori Anda pada saat {i>runtime<i}. API mengekspos indikator lampu berhenti untuk penggunaan memori tinggi, normal, dan rendah. Anda dapat berlangganan indikator untuk mendapatkan info terbaru atau, melakukan polling secara langsung untuk saat ini . Saat mendapatkan sinyal merah, pertimbangkan untuk mengurangi objek game Anda kumpulan data atau cache. Sertakan konteks ini dalam telemetri game Anda selama live operasional bisnis dan meninjau metrik performa setelah peluncuran.

Untuk mempelajari lebih dalam organisasi memori di perangkat Android dan bagaimana Unity dapat digunakan, menonton Memahami penggunaan memori Android (dari Google I/O '18). Video akan menjelaskan jenis-jenis masalah memori dan ketika memori rendah yang sebenarnya.

Pembersihan sampah memori

Pembersihan sampah memori di lingkungan memori terkelola membersihkan memori yang tidak digunakan yang dapat didaur ulang untuk aplikasi. Ikuti praktik terbaik pembersihan sampah memori untuk menghindari alokasi sumber daya memori yang tidak perlu.

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

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

// 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 edit file template MonoBehaviour untuk menghapus Start() dan fungsi stub Update() sehingga Anda tidak sengaja mengosongkan berfungsi seiring dengan perkembangan Anda.

Untuk ringkasan urutan eksekusi peristiwa MonoBehaviour, lihat Urutan eksekusi untuk fungsi peristiwa dalam dokumentasi Unity. Untuk mempelajari manajemen memori lebih lanjut, lihat materi Manajemen Memori di Unity.

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

Pengumpulan prefab

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

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

Pengiriman aset

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

Anda dapat menggunakan Play Asset Delivery (PAD) untuk mengelola aset yang diperlukan game Anda saat penginstalan, fast follow, atau on-demand. Paket Aset Unity terintegrasi untuk mendukung PAD, dan Anda dapat menggunakan alat ini untuk menentukan elemen mana yang ditayangkan.

Addressables

Menyiapkan resource dinamis – seperti prefab, tekstur, dan suara file – saat runtime bukan lagi operasi yang kompleks jika Anda mempersiapkan dan meninjau sistem penamaan {i>Addressables<i}. Dapat Dialamatkan aset memisahkan cara Anda mengatur konten dari cara membangun dan memuat konten Anda. Sistem Addressables menggantikan folder Resources dan Aset Bundle untuk menyederhanakan cara Anda mereferensikan aset dan memuatnya saat runtime.

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

Dengan tata letak aset Addressable, ada kelebihan dan kekurangan dari terlalu sedikit atau menggabungkan terlalu banyak aset ke dalam paket umum. Untuk mempelajari lebih lanjut pengelolaan konten dengan Addressables, lihat Sederhanakan pengelolaan konten Anda dengan Addressables.

Anda dapat menyiapkan demo mandiri dan bereksperimen dengan mode akses untuk mendapatkan nyaman dengan sistem Addressables. Anda juga dapat melihat proyek {i>open source<i} BuildLayout Explorer untuk Unity 2019.3 dan yang lebih baru, dan periksa laporan buildlayout.txt yang dibuat oleh Addressables.

Aset untuk Chop Chop, sebuah Proyek Terbuka Unity, dikemas menggunakan Sistem Addressables untuk semua bongkar muat barang. Lihat Mengemas konten dengan Aset yang Dapat Dialamatkan | Membuka Devlog Project untuk panduan struktur dan penyiapan konfigurasi Addressables paket.

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

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

Plugin pihak ketiga

Jika Anda menggunakan plugin pihak ketiga, seperti plugin di Aset Unity Simpan, pastikan Anda meninjau folder dan menghapus aset yang tidak diperlukan dari Resources. Selama proses build, Unity mengumpulkan semua aset yang disertakan dalam folder Resources dan memaketkannya dalam satu yang dapat diakses saat runtime. Hal ini dapat menambah ukuran yang menggelembung pada paket akhir, dan sering kali tidak diperlukan.

Untuk menemukan semua folder referensi dengan cepat, telusuri Resources di Proyek . Anda kemudian dapat memilih satu per satu untuk mengidentifikasi isinya dan apakah itu untuk game Anda.

Gambar 7. Mungkin ada beberapa folder Resources mengintai di dalam folder yang didownload dari Unity Asset Store. Bersihkan hingga hindari paket tersebut dalam paket aplikasi Anda.

Publikasikan dan kelola

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

Menganalisis masukan dari rilis terbatas

Anda dapat meluncurkan kepada audiens terbatas yang ditargetkan serta melakukan versi beta dalam skala yang lebih besar menguji, atau mengaktifkan game untuk ketersediaan penuh di semua pasar. Dengan dalam rilis terbatas, Anda dapat menyesuaikan performa aplikasi berdasarkan audiens langsung dan kumpulan perangkat.

Misalnya, Anda dapat menggunakan Android Performance Tuner untuk Unity dan Google Analytics untuk Unity untuk mendapatkan insight tentang performa aplikasi Anda dan tren pemain, dari yang dapat disesuaikan dan mendorong pembaruan oleh tim pengembangan. Anda juga dapat menggunakan data analitik untuk merencanakan sekuel atau game terkait yang genrenya serupa.

Pengujian Alfa dan beta

Setelah Anda menyiapkan profil aplikasi di Konsol Google Play, Anda dapat menyiapkan paket publik build pengujian alfa dan beta dan mendistribusikannya ke audiens terbatas untuk peninjauan pra-peluncuran. Menurut meluncurkan kepada audiens terbatas, Anda dapat menyelesaikan masalah terakhir dengan perangkat yang lengkap dan mengumpulkan masukan awal yang dapat Anda tanggapi sebelum tersedia secara global.

Build Unity Anda didistribusikan melalui Android App Bundle. Sebagai informasi, lihat Manual: Mengirimkan ke Google Play dari Unity, yang juga menjelaskan perubahan dari file APK ke AAB format font.

Pantau dan lacak

Selama fase liveops dan distribusi game, Anda dapat menggunakan Android Tanda vital untuk membantu melacak masalah kinerja pada 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. Ingatlah untuk memanfaatkan dari Android Performance Tuner (APT) dan plugin Unity yang sesuai untuk 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 Anda dipublikasikan. Memantau, mempertahankan, dan menanggapi performa dan masukan sangatlah penting kepada pengguna yang puas, ulasan positif, dan adopsi akhir game Anda di semua pasar.