Unity motoru için VkQuality eklentisi, lansman zamanı önerileri sunar belirli bir platformda oyununuz için kullanmak üzere grafik API'sının (Vulkan veya OpenGL ES) cihazlar.
VkQuality, Vulkan'ı Unity'ye kıyasla daha kısıtlı bir cihaz grubunda öneriyor motorunun varsayılan izin verilenler listesine eklenir. VkQuality'yi kullanarak şunun performans avantajlarından yararlanın: Vulkan, Vulkan kullanımını yeni grafiklere sahip yeni cihazlarla sınırlar Bu durum, oyununuzun sürücü sorunlarıyla karşılaşma olasılığını azaltır. Yalnızca VkKaliteli önerilmesini garantilemez, çünkü yalnızca önerilen cihazlarda sürücü sorunlarıyla karşılaşılabilir. VkKaliteli, özel listeleri destekler, Bu uygulamada, Google Arama'da hesabınız için cihaz önerileri ekleyip bir oyundur.
Unity motor oyununuzda Vulkan'ı etkinleştirin
VkQuality, oyununuzda hem OpenGL ES hem de Vulkan oluşturucularının olmasını gerektirir etkinleştirdiğinizden emin olun. Grafik API'sı seçeneğini kullanarak veya grafik API'lerini manuel olarak ayarlayarak kullanabilirsiniz.
Unity motoru için VkQuality eklentisini edinin
VkQuality eklentisini GitHub'dan indirin. Eklenti Unity 2021 ve daha yeni sürümlerle uyumludur. Etkinleştirmek için Unity 2021 LTS veya sonraki bir sürümü kullanın Vulkan, Android'de. Eklenti paketi, grafik API'sini başlangıçta ayarlayacak ve ardından Cihazın etkin grafik API'si.
VkQuality Vulkan öneri listesini yönetme
VkKalite, desteklenen cihazlardan oluşan varsayılan bir öneri listesi içerir. Örneğin, hakkında bilgi için Özel bir öneri listesi kullanma öneri listesi bölümüne bakın.
Öneri listesinde üç kategori bulunur:
- Vulkan cihaz izin verilenler listesi
- GPU önerisi izin verilenler listesi
- GPU önerisi reddetme listesi
Cihaz izin verilenler listesi eşleşmeleri
VkKaliteli öncelikle etkin cihazın cihaza dahil olup olmadığını kontrol eder.
minimum Android sürümünü ve Vulkan sürücüsünü çalıştırıp çalıştırmadığı
izin verilenler listesinde belirtilen sürüm. Bu ölçütler karşılanırsa
VkKaliteli, Vulkan'ı
RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH
sıralama değeri.
Cihaz, izin verilenler listesinde olmasına rağmen bir Android sürümünü veya sürücüsünü çalıştırıyorsa
izin verilenler listesinde bunun için belirtilen minimum sürümün altında olan sürüm, VkQuality
RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER
değerini döndürerek OpenGL ES'yi önerir.
GPU önerisi eşleşmeleri
Cihazın izin verilenler listesinde herhangi bir cihaz eşleşmesi bulunmazsa VkQuality,
GPU önerisine göre GPU modeli ve sürücü sürümü izin verme ve reddetme
listeler. GPU modeli ve sürücü sürümü, GPU'daki bir girişle eşleşiyorsa
Vk Quality, Vulkan'ı önerirken bunun için
RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH
sıralama sabiti.
GPU modeli ve sürücü sürümü, GPU'daki bir girişle eşleşiyorsa
öneri reddetme listesi, VkQuality'nin önceki deneyime döndüğünde OpenGL ES'yi
RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH
Eşleşmeyen öneriler
Eşleşme bulunmazsa Vulkan, Android API düzeyi
[gelecekteki API] seviyesinin aynı veya bu seviyeden yüksek olduğunu
öneri listesi. Varsayılan öneri listesinin Gelecekteki API düzeyi şudur:
36: VkQuality (API düzeyi 36 veya üstünü çalıştıran eşleşmeyen cihazlarda)
RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID
enum sabitini döndürür.
Cihazın izin verilenler listesinde veya GPU öneri listelerinde eşleşme bulunmazsa
Cihazın API düzeyi ise Gelecekteki API düzeyi olan VkQuality'nin altındaysa
RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH
değerini döndürerek OpenGL ES'yi önerir.
VkQuality arşiv dosyasını projenize ekleyin
VkQuality eklentisi, VkQuality-1.x.x.aar
İndirilen paket arşivinin Assets/Android/Plugins
dizini. Asıl
.aar dosyasının sürüm numarası paketin sürüm numarasıyla eşleşiyor
arşiv adı. Eklentiyi yüklemek için aşağıdaki adımları uygulayın:
- .aar dosyasını sitenizin
Assets/Android/Plugins
dizinine kopyalayın. belirler. (Buna karşılık gelenAndroid
vePlugins
alt dizinlerini oluşturun. mevcut değildir.)
![Gerekli proje dizinindeki VkQuality .aar dosyası.](https://developer.android.google.cn/static/images/games/engines/unity/unity-vkquality-unityassets.png?authuser=8&hl=tr)
- Unity Projesi hiyerarşisinde
VkQuality-1.x.x
eklenti dosyasını seçin Denetçi bölmesinde İçe Aktarma Ayarlarını görüntülemeniz gerekir. Lütfen Android platformu işaretli olmalıdır.
![Şekil 2. VkQuality eklenti platformu içe aktarma ayarları.](https://developer.android.google.cn/static/images/games/engines/unity/unity-vkquality-unityplugin.png?authuser=8&hl=tr)
VkQuality'yi çağırmak için özel etkinlik kullanma
Tipik Unity motor eklentilerinden farklı olarak, Unity motoru başlatılmadan önce grafik API'sinin önerisini bulun. Daha sonra Unity oynatıcı komut satırı bağımsız değişkenleri özelliğini kullanarak Grafik API'sini VkQuality önerisine göre kullanır. Android'de, komut satırı bağımsız değişkenleri, Özel bir oluşturarak UnityPlayerActivity etkinliği hakkında daha fazla bilgi edinin.
Oyununuz zaten özel bir etkinlik kullanıyorsa Bir Mevcut özel etkinlikler bölümüne bakın. Şunun için yeni bir özel etkinlik oluşturmak için: Unity projenize özel etkinlik ekleme başlıklı makaleye göz atın.
Unity Engine projenize özel etkinlik ekleyin
Eklentiye VkQuality kullanan bir özel etkinlik örneği verilmiştir.
paketinde Assets/Plugins/Android/VkQualityTestActivity.java
olarak tanımlanmıştır.
Dosyayı özelleştirmek ve oyununuzda kullanmak için aşağıdaki adımları uygulayın:
VkQualityTestActivity.java
dosyasını kopyalayıpAssets/Plugins/Android
dizini.- Adı, oyununuza uygun bir adla değiştirin (örneğin,
MyGameActivity.java
) bilgileri gösterilir. - Dosyayı bir metin düzenleyicide açın.
VkQualityTestActivity
olan sınıf adını, verdiğiniz adla değiştirin dosyası (örneğin,MyGameActivity.java
).com.google.android.games.VkQualityTest
olan paket adını şu şekilde değiştirin: Unity Proje Ayarlarınızdaki Paket Adı alanının değeriyle eşleştirin Diğer Ayarlar altındaki Oynatıcı kategorisi (örneğin,com.mycompany.mygame
) tıklayın.- Dosyayı kaydedin ve kapatın.
Özel etkinliğinize referans veren özel bir manifest dosyası ekleyip Unity'ye bildirin özel manifest dosyanızı kullanmak için:
Assets/Plugins/Android
içindenAndroidManifest.xml
dosyasını kopyalayın eklenti paketinin dizinini projenizinAsset/Plugins/Android
klasörüne ekleyin dizin.- Dosyayı bir metin düzenleyicide açın.
activity android:name
ayarının değerini Şurayacom.google.android.games.VkQualityTest.VkQualityTestActivity
: önceki adımlarda kullandığınız paket ve etkinlik adları (örneğin,com.mycompany.mygame.MyGameActivity
).- Dosyayı kaydedin ve kapatın.
- Unity ayarlar penceresini açıp Player ayarlarını seçin. Genişlet Yayınlama Ayarları bölümüne gidin ve Özel Ana Manifest'i işaretleyin. onay kutusunu işaretleyin.
![Şekil 3. Unity Oynatıcı ayarlarındaki Özel Ana Manifest seçeneği](https://developer.android.google.cn/static/images/games/engines/unity/unity-vkquality-unitymanifest.png?authuser=8&hl=tr)
Projeniz artık şu adreste VkQuality'yi çağıran özel etkinliği kullanacak şekilde ayarlandı: startup'ı seçer ve VkQuality önerisine göre Vulkan veya OpenGL ES'yi seçer.
VkQuality'yi mevcut bir özel etkinliğe ekleme
Oyununuzda varsayılanı geçersiz kılan bir özel etkinlik zaten varsa
UnityPlayerActivity
,
şu kodu kullanabilirsiniz:
İlk olarak, VkQuality import (içe aktarma) ifadesini üst kısımdaki içe aktarmalar listesine ekleyin özel etkinlik dosyası:
Kotlin
import com.google.android.games.vkquality.VKQuality;
Java
import com.google.android.games.vkquality.VKQuality;
Sonra, Activity
sınıfınızın gövdesinde
grafik API seçimleri:
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;
API seçimini izlemek için bir değişken oluşturun:
Kotlin
private var apiOverride = OVERRIDE_NONE
Java
private int apiOverride = OVERRIDE_NONE;
Activity
sınıfınıza aşağıdaki işlevi ekleyin:
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); } }
onCreate()
geçersiz kılmasının üst kısmından CheckVkQuality
işlevini çağırma
işlevini çağırın:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { CheckVkQuality() super.onCreate(savedInstanceState) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { CheckVkQuality(); super.onCreate(savedInstanceState); }
Son olarak, updateUnityCommandLineArguments()
işlevinin bir geçersiz kılmasını ekleyin
apiOverride
değerini kullanan bir komut satırı bağımsız değişkeni
Hangi grafik API'sinin kullanılacağını belirten Unity motoru:
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; }
Özel etkinliğiniz artık başlangıçta VkQuality'yi çağırır ve Vulkan veya OpenGL'yi seçer ES, VkQuality önerisine göre.
Özel bir öneri listesi kullanın
Dosyanın adını ileterek özel bir öneri listesi dosyası belirtin
içeren, boş bir dize iletmek yerine listeyi StartVkQuality()
öğesine içeren bir kod snippet'i ekleyin:
Kotlin
val startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq")
Java
int startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq");
VkKaliteli ilk olarak uygulamanızın dahili depolamasında dosyayı arar
dizin. Dosya dahili depolama alanında değilse VkKaliteli,
dosyası olarak ayarlayın. Dosya iki konumda da değilse
VkQuality, ERROR_MISSING_DATA_FILE
enum değerini döndürür.
Özel bir öneri listesi dosyası oluşturmak için VkQuality List Editor'ı (VkKalite Listesi Düzenleyici) kullanın aracı GitHub deposunda bulabilirsiniz. araç, README (BENİOKU) öğesi içindedir.