Plugin VkKualitas untuk mesin Unity memberikan rekomendasi waktu peluncuran API grafis—Vulkan atau OpenGL ES—untuk digunakan game Anda di perangkat.
VkKualitas merekomendasikan Vulkan pada kumpulan perangkat yang lebih terbatas daripada Unity pada daftar default mesin telusur. Gunakan VkKualitas untuk mendapatkan manfaat performa Vulkan sekaligus membatasi penggunaan Vulkan ke perangkat yang lebih baru dengan grafis yang lebih baru {i>driver<i}, yang membatasi paparan game Anda terhadap masalah pengemudi. Khusus VkKualitas memberikan rekomendasi berkualitas, bukan jaminan, karena masih mungkin mengalami masalah {i>driver<i} pada perangkat yang direkomendasikan. VkKualitas mendukung daftar kustom, yang memberi Anda kemampuan untuk menambah atau menghapus rekomendasi perangkat untuk game.
Mengaktifkan Vulkan di game mesin Unity Anda
VkKualitas mengharuskan game Anda memiliki perender OpenGL ES dan Vulkan diaktifkan di setelan project Unity. Aktifkan perender dengan menggunakan tombol Otomatis Graphics API atau dengan menyetel secara manual API grafis.
Mendapatkan plugin VkKualitas untuk mesin Unity
Download plugin VkKualitas dari GitHub. Plugin ini kompatibel dengan Unity 2021 dan yang lebih baru. Gunakan LTS 2021 Unity atau yang lebih tinggi untuk mengaktifkan Vulkan di Android. Paket plugin berisi contoh proyek dasar yang menggunakan plugin untuk menyetel API grafis saat startup, lalu menampilkan string yang disetel ke API grafis aktif perangkat.
Mengelola daftar rekomendasi Vulkan VkKualitas
VkKualitas menyertakan daftar rekomendasi default dari perangkat yang didukung. Sebagai informasi tentang penggunaan daftar rekomendasi khusus, lihat Menggunakan daftar rekomendasi.
Daftar rekomendasi mencakup tiga kategori:
- Daftar perangkat Vulkan yang diizinkan
- Daftar rekomendasi GPU yang diizinkan
- Daftar tolak rekomendasi GPU
Kecocokan daftar yang diizinkan perangkat
VkKualitas memeriksa terlebih dahulu apakah perangkat aktif termasuk dalam perangkat yang mengizinkan
dan apakah menjalankan versi Android minimum dan driver Vulkan
yang ditentukan dalam daftar
yang diizinkan untuk perangkat tersebut. Jika kriteria-kriteria ini terpenuhi,
VkKualitas merekomendasikan Vulkan dengan menampilkan
Nilai enum RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH
.
Jika perangkat ada dalam daftar yang diizinkan, tetapi menjalankan versi Android atau driver
di bawah minimum yang ditentukan untuknya dalam daftar yang diizinkan, VkKualitas
merekomendasikan OpenGL ES dengan menampilkan RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER
.
Kecocokan rekomendasi GPU
Jika tidak ditemukan kecocokan perangkat di daftar yang diizinkan perangkat, Vkquality akan mengevaluasi
Model GPU dan versi driver terhadap rekomendasi GPU mengizinkan dan menolak
daftar. Jika model GPU dan versi driver cocok dengan entri di GPU
dari daftar rekomendasi yang diizinkan, Vkquality merekomendasikan Vulkan dengan menampilkan
Konstanta enum RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH
.
Jika model GPU dan versi driver cocok dengan entri di GPU
daftar penolakan rekomendasi, VkKualitas merekomendasikan OpenGL ES dengan menampilkan
RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH
.
Rekomendasi tidak memiliki kecocokan
Jika tidak ditemukan kecocokan, VkKualitas akan merekomendasikan Vulkan jika level API Android
perangkat yang berjalan sama dengan atau lebih tinggi dari Future API level di
daftar rekomendasi. Daftar rekomendasi default memiliki Future API level sebesar
36, artinya pada perangkat tidak tertandingi yang menjalankan API level 36 atau yang lebih tinggi, VkKualitas
menampilkan konstanta enum RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID
.
Jika tidak ditemukan kecocokan di daftar yang diizinkan perangkat atau daftar rekomendasi GPU,
dan level API perangkat berada di bawah Future API level, Vkquality
merekomendasikan OpenGL ES dengan menampilkan RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH
.
Menambahkan file arsip Vkquality ke project Anda
Plugin VkKualitas adalah file VkQuality-1.x.x.aar
yang terletak di
Assets/Android/Plugins
dari arsip paket yang didownload. Sebenarnya
nomor versi file .aar cocok dengan nomor versi paket
nama arsip. Untuk menginstal plugin, lakukan langkah-langkah berikut:
- Salin file .aar ke direktori
Assets/Android/Plugins
file proyek. (Buat subdirektoriAndroid
danPlugins
yang diperlukan jika keduanya tidak ada.)
- Memilih file plugin
VkQuality-1.x.x
di hierarki Project Unity untuk memunculkan Import Settings di panel Inspector. Pastikan atribut Platform Android dicentang.
Menggunakan aktivitas kustom untuk memanggil VkKualitas
Tidak seperti plugin mesin Unity pada umumnya, VkKualitas harus dijalankan untuk mendapatkan rekomendasi API grafis sebelum mesin Unity diinisialisasi. Anda kemudian menggunakan fitur argumen command line pemain Unity untuk menyetel API grafis berdasarkan rekomendasi Vkquality. Di Android, meneruskan argumen command line mengharuskan penggantian perilaku default UnityPlayerActivity dengan membuat instance aktivitas Anda.
Jika game Anda sudah menggunakan aktivitas khusus, lihat Tambahkan VkKualitas ke bagian aktivitas kustom yang ada. Untuk membuat aktivitas khusus baru bagi lihat Menambahkan aktivitas kustom ke project Unity, yang mengikuti berikut ini.
Menambahkan aktivitas kustom ke project mesin Unity Anda
Contoh aktivitas kustom yang menggunakan VkKualitas disertakan dalam plugin
di Assets/Plugins/Android/VkQualityTestActivity.java
.
Untuk menyesuaikan file dan menggunakannya dalam game, lakukan langkah-langkah berikut:
- Salin file
VkQualityTestActivity.java
ke DirektoriAssets/Plugins/Android
. - Ganti namanya dengan nama yang sesuai untuk game Anda (misalnya,
MyGameActivity.java
). - Buka file di editor teks.
- Ubah nama class dari
VkQualityTestActivity
menjadi nama yang Anda berikan (misalnya,MyGameActivity.java
). - Ubah nama paket dari
com.google.android.games.VkQualityTest
menjadi cocokkan dengan nilai kolom Package Name di Setelan Project Unity Anda Kategori Player di bagian Other Settings (misalnya,com.mycompany.mygame
). - Simpan dan tutup file tersebut.
Menambahkan file manifes kustom yang merujuk pada aktivitas kustom Anda, dan memberi tahu Unity untuk menggunakan file manifes kustom:
- Salin file
AndroidManifest.xml
dariAssets/Plugins/Android
direktori paket plugin ke dalamAsset/Plugins/Android
project Anda saat ini. - Buka file di editor teks.
- Ubah nilai setelan
activity android:name
daricom.google.android.games.VkQualityTest.VkQualityTestActivity
ke nama paket dan aktivitas yang Anda gunakan di langkah sebelumnya (misalnya,com.mycompany.mygame.MyGameActivity
). - Simpan dan tutup file tersebut.
- Buka jendela setelan Unity dan pilih setelan Player. Luaskan bagian Setelan Publikasi, lalu periksa Manifes Utama Kustom .
Proyek Anda sekarang siap untuk menggunakan aktivitas khusus yang memanggil VkKualitas di dan memilih Vulkan atau OpenGL ES berdasarkan rekomendasi Vkquality.
Menambahkan Vkquality ke aktivitas kustom yang ada
Jika game Anda sudah memiliki aktivitas kustom yang menggantikan aktivitas default
UnityPlayerActivity
, integrasikan rekomendasi VkKualitas dengan menambahkan
kode berikut:
Pertama, tambahkan pernyataan impor VkKualitas ke daftar impor di bagian atas file aktivitas khusus:
Kotlin
import com.google.android.games.vkquality.VKQuality;
Java
import com.google.android.games.vkquality.VKQuality;
Selanjutnya, buat beberapa konstanta dalam isi class Activity
untuk
pilihan API grafis:
Kotlin
companion object { private const val OVERRIDE_NONE = 0 private const val OVERRIDE_GLES = 1 private const val OVERRIDE_VULKAN = 2
Java
private static final int OVERRIDE_NONE = 0; private static final int OVERRIDE_GLES = 1; private static final int OVERRIDE_VULKAN = 2;
Buat variabel untuk melacak pemilihan API:
Kotlin
private var apiOverride = OVERRIDE_NONE
Java
private int apiOverride = OVERRIDE_NONE;
Tambahkan fungsi berikut ke class Activity
Anda:
Kotlin
private fun CheckVkQuality() { val vkQuality = VKQuality(this) val startResult = vkQuality.StartVkQuality("") if (startResult == VKQuality.INIT_SUCCESS) { // In the current release, we can assume GetVkQuality is // ready as soon as StartVkQuality has returned success. val getResult = vkQuality.GetVkQuality() LogVkQualityResult(getResult) apiOverride = when (getResult) { VKQuality.RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH, VKQuality.RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH, VKQuality.RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID -> OVERRIDE_VULKAN VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DEVICE, VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER, VKQuality.RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH, VKQuality.RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH -> OVERRIDE_GLES else -> OVERRIDE_GLES } vkQuality.StopVkQuality() } else { Log.e("VKQUALITY", "VkQuality start failed with result: $startResult") } }
Java
private void CheckVkQuality() { VKQuality vkQuality = new VKQuality(this); // An empty string specifies use of the default // built-in device list file. int startResult = vkQuality.StartVkQuality(""); if (startResult == VKQuality.INIT_SUCCESS) { // In the current release, we can assume GetVkQuality is // ready as soon as StartVkQuality has returned success. int getResult = vkQuality.GetVkQuality(); switch (getResult) { case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH: case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH: case VKQuality.RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID: apiOverride = OVERRIDE_VULKAN; break; case VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DEVICE: case VKQuality.RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER: case VKQuality.RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH: case VKQuality.RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH: default: apiOverride = OVERRIDE_GLES; break; } vkQuality.StopVkQuality(); } else { Log.e("VKQUALITY", "VkQuality start failed with result: " + startResult); } }
Memanggil fungsi CheckVkQuality
dari bagian atas penggantian onCreate()
sebelum memanggil implementasi class dasar:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { CheckVkQuality() super.onCreate(savedInstanceState) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { CheckVkQuality(); super.onCreate(savedInstanceState); }
Terakhir, tambahkan penggantian fungsi updateUnityCommandLineArguments()
yang menggunakan nilai apiOverride
untuk meneruskan argumen command line ke
Mesin Unity yang menetapkan API grafis yang akan digunakan:
Kotlin
override fun updateUnityCommandLineArguments(cmdLine: String): String { if (apiOverride == OVERRIDE_VULKAN) { Log.i("VKQUALITY", "Passing -force-vulkan") return appendCommandLineArgument(cmdLine, "-force-vulkan") } else if (apiOverride == OVERRIDE_GLES) { Log.i("VKQUALITY", "Passing -force-gles") return appendCommandLineArgument(cmdLine, "-force-gles") } Log.i("VKQUALITY", "No override passed") // let Unity pick the Graphics API based on PlayerSettings return cmdLine } private fun appendCommandLineArgument(cmdLine: String, arg: String?): String { return if (arg == null || arg.isEmpty()) cmdLine else if (cmdLine == null || cmdLine.isEmpty()) arg else "$cmdLine $arg" }
Java
@Override protected String updateUnityCommandLineArguments(String cmdLine) { if (apiOverride == OVERRIDE_VULKAN) { Log.i("VKQUALITY", "Passing -force-vulkan"); return appendCommandLineArgument(cmdLine, "-force-vulkan"); } else if (apiOverride == OVERRIDE_GLES) { Log.i("VKQUALITY", "Passing -force-gles"); return appendCommandLineArgument(cmdLine, "-force-gles"); } Log.i("VKQUALITY", "No override passed"); // let Unity pick the Graphics API based on PlayerSettings return cmdLine; } private String appendCommandLineArgument(String cmdLine, String arg) { if (arg == null || arg.isEmpty()) return cmdLine; else if (cmdLine == null || cmdLine.isEmpty()) return arg; else return cmdLine + " " + arg; }
Aktivitas kustom Anda sekarang memanggil VkKualitas saat memulai dan memilih Vulkan atau OpenGL ES berdasarkan rekomendasi Vkquality.
Menggunakan daftar rekomendasi kustom
Tentukan file daftar rekomendasi khusus dengan meneruskan nama file
berisi daftar ke StartVkQuality()
, bukan meneruskan string kosong:
Kotlin
val startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq")
Java
int startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq");
VkKualitas akan mencari file di penyimpanan internal aplikasi terlebih dahulu
saat ini. Jika file tidak ada di penyimpanan internal, VkKualitas akan mencoba memuat
dari aset app bundle Anda. Jika file itu tidak
ada di salah satu lokasi,
VkKualitas menampilkan nilai enum ERROR_MISSING_DATA_FILE
.
Untuk membuat file daftar rekomendasi kustom, gunakan Vkquality List Editor yang terletak di repositori GitHub. Dokumentasi untuk file ini terletak di README.