Ringkasan Android Performance Tuner (Unity)

Panduan ini menjelaskan cara menggunakan plugin Unity untuk merekam dan mengupload data waktu render frame dari Unity 2017.4 atau yang lebih baru.

Untuk mesin game yang menggunakan C atau C++, lihat panduan untuk mesin game native.

Latar belakang

Komponen utama pengalaman game adalah performa rendering. Performa rendering adalah hasil dari dua input berikut:

  • Kecepatan frame: Seberapa sering frame dibuat.
  • Setelan kualitas grafis: Tingkat fidelitas saat frame disajikan, termasuk fidelitas simulasi dan grafis.

Untuk game, performa rendering yang baik ditetapkan sebagai berikut:

  • Memberikan kecepatan frame yang stabil dan konsisten (yaitu, persentase frame yang dirender pada frekuensi yang diinginkan).
  • Merender frame dengan frekuensi tertinggi sekaligus mempertahankan stabilitas, biasanya 30 atau 60 FPS, tergantung pada jenis game.
  • Memaksimalkan tingkat detail untuk pengguna sesuai dengan kepadatan dan ukuran layarnya sekaligus tetap mencapai kecepatan frame yang stabil dan diinginkan.

Library Android Frame Pacing membatasi banyak variasi dalam waktu render frame, yang menyediakan kecepatan frame yang stabil untuk game. Variasi lainnya dalam waktu render frame disebabkan oleh tingkat detail yang ditampilkan selama scene tertentu dalam gameplay dan kemampuan grafis perangkat. Menggunakan Android Performance Tuner, Anda dapat menentukan waktu selama gameplay saat waktu render frame lebih lambat atau lebih cepat dari target, dan menghubungkan masalah dan peluang ini dengan:

  • Setelan kualitas tertentu
  • Scene tertentu dalam game Anda
  • Model perangkat atau spesifikasi perangkat tertentu

Merekam dan mengupload data

Library Tuning Fork bergantung pada salah satu fungsi tick yang dipanggil setiap frame oleh library Android Frame Pacing (atau oleh mesin Unity untuk Unity versi lama yang tidak memiliki Library Frame Pacing). Dalam library, informasi tick ini digabungkan menjadi histogram yang kemudian diupload secara berkala ke Google Play melalui endpoint HTTP. Setiap tick direkam sebagai terkait dengan kunci instrumen dan anotasi. Anda menentukan anotasi menggunakan plugin Unity.

Kunci instrumen

Kunci instrumen menunjukkan asal tick dalam frame, dan merupakan bilangan bulat yang harus diteruskan ke setiap panggilan fungsi tick. Hal ini dilakukan secara otomatis oleh plugin Unity. Jika opsi Optimized Frame Pacing diaktifkan di setelan Unity untuk game Anda (tersedia di Unity versi 2019.3.14 atau yang lebih baru), Android Performance Tuner akan menggunakan informasi dari library Android Frame Pacing untuk melaporkan metrik yang ditingkatkan.

Anotasi

Anotasi memberikan informasi kontekstual tentang apa yang dilakukan game Anda saat tick direkam. Contoh, anotasi dapat mengidentifikasi salah satu dari hal berikut:

  • Level game saat ini
  • Scene tertentu sedang dimuat
  • "Bos besar" ada di layar
  • Informasi status game yang terkait lainnya

Anotasi ditetapkan dalam dialog yang diberikan oleh plugin Unity.

Secara internal, library Tuning Fork menggunakan format buffering protokol Google untuk menyimpan anotasi dan parameter fidelitas. Ini adalah protokol multibahasa yang terdefinisi dengan baik untuk data terstruktur yang dapat diperluas. Untuk informasi selengkapnya, lihat dokumentasi Buffering Protokol.

Parameter fidelitas

Parameter fidelitas memengaruhi performa dan fidelitas grafis game, seperti level detail mesh, resolusi tekstur, dan metode antialias. Seperti anotasi, parameter fidelitas ditentukan dalam dialog yang disediakan oleh plugin Unity.

Overhead memori dan CPU

Semua memori yang digunakan oleh library Tuning Fork dialokasikan pada inisialisasi untuk menghindari kejutan selama bermain game. Ukuran data bergantung pada jumlah kunci instrumen, jumlah kemungkinan anotasi, dan jumlah bucket di setiap histogram; semua ini dikalikan empat byte ini untuk setiap bucket. Terdapat juga dua salinan dari semua histogram untuk memungkinkan pengiriman dalam mode buffering ganda.

Pengiriman terjadi di thread terpisah dan tidak memblokir panggilan tick. Jika tidak ada koneksi upload, pengiriman akan dimasukkan ke antrean untuk diupload di lain waktu.

Terdapat sedikit overhead pemrosesan untuk memanggil fungsi tick: ini hanya menghitung indeks ke dalam array bucket histogram dan meningkatkan jumlah bilangan bulat.

Permintaan web

Library membuat dua jenis permintaan ke endpoint server:

  • Permintaan generateTuningParameters pada inisialisasi
  • Secara berkala selama gameplay, permintaan uploadTelemetry untuk mengirimkan data ke server

Pemain offline

Jika tidak ada koneksi yang tersedia saat inisialisasi, permintaan akan dicoba lagi beberapa kali dengan waktu back-off yang meningkat. Jika tidak ada koneksi saat diupload, upload akan di-cache. Upload disimpan sebagai file dalam penyimpanan sementara.

Persyaratan

Untuk menggunakan plugin di game Anda, gunakan versi Unity yang didukung:

  • Unity versi 2017.4 atau yang lebih baru dan .NET versi 4.6
  • Untuk menggunakan file Ekspansi APK, diperlukan Unity 2018.2
  • Untuk peningkatan kecepatan frame dan pengukuran GPU, diperlukan Unity versi 2019.3.14 atau yang lebih baru
  • Untuk dukungan scene Addressables, diperlukan Unity 2019.3 atau yang lebih baru dan Paket Addressables 1.19.4 atau yang lebih baru.

Mengintegrasikan Android Performance Tuner di Unity

Untuk informasi cara mengintegrasikan Android Performance Tuner di Unity, lihat Mengaktifkan API.