ปลั๊กอิน Vkquality สำหรับเครื่องมือ Unity ให้คำแนะนำเมื่อถึงเวลาเปิดตัว ของ API กราฟิกอย่าง Vulkan หรือ OpenGL ES เพื่อใช้สำหรับเกมของคุณ อุปกรณ์
Vkquality แนะนำ Vulkan ในชุดอุปกรณ์ที่ถูกจำกัดมากกว่า Unity รายการที่อนุญาตของเครื่องมือ ใช้ Vkquality เพื่อใช้ประโยชน์ด้านประสิทธิภาพของ Vulkan ในขณะเดียวกันก็จำกัดการใช้ Vulkan ในอุปกรณ์รุ่นใหม่ที่มีกราฟิกใหม่ ซึ่งจะจำกัดจำนวนผู้ที่เห็นเกมของคุณเมื่อมีปัญหาเกี่ยวกับไดรเวอร์ Vkquality เท่านั้น ให้คำแนะนำที่มีคุณภาพ ไม่ใช่การรับประกัน เนื่องจากยังคงทำได้ พบปัญหาไดรเวอร์ในอุปกรณ์ที่แนะนำ Vkquality รองรับรายการที่กำหนดเอง ซึ่งช่วยให้คุณเพิ่มหรือนำคำแนะนำอุปกรณ์ออกสำหรับ เกม
เปิดใช้ Vulkan ในเกมเครื่องมือ Unity
Vkquality กำหนดให้เกมของคุณต้องมีทั้งโหมดแสดงภาพ OpenGL ES และ Vulkan เปิดใช้ในการตั้งค่าโปรเจ็กต์ Unity แล้ว เปิดใช้งานโหมดแสดงภาพโดยใช้ตัวเลือกอัตโนมัติ ตัวเลือก API กราฟิก หรือโดยการตั้งค่าด้วยตนเอง API ของกราฟิก
รับปลั๊กอิน Vkquality สำหรับเครื่องมือ Unity
ดาวน์โหลดปลั๊กอิน Vkquality จาก GitHub ปลั๊กอินคือ สามารถใช้ร่วมกับ Unity 2021 ขึ้นไปได้ ใช้ Unity 2021 LTS หรือเวอร์ชันใหม่กว่าเพื่อเปิดใช้ Vulkan บน Android แพ็กเกจปลั๊กอินมีโปรเจ็กต์ตัวอย่างพื้นฐานที่ใช้ ปลั๊กอินเพื่อตั้งค่า API กราฟิกเมื่อเริ่มต้นระบบ จากนั้นจะแสดงชุดสตริงเป็น API กราฟิกที่ทำงานอยู่ของอุปกรณ์
จัดการรายการคำแนะนำ Vkquality Vulkan
Vkquality มีรายการคำแนะนำเริ่มต้นของอุปกรณ์ที่รองรับ สำหรับ ข้อมูลเกี่ยวกับการใช้รายการคำแนะนำที่กำหนดเอง ให้ดูที่หัวข้อใช้ รายการแนะนำ
รายการคําแนะนํามี 3 หมวดหมู่ดังนี้
- รายการที่อนุญาตของอุปกรณ์ Vulkan
- รายการที่อนุญาตสำหรับคำแนะนำ GPU
- รายการปฏิเสธคำแนะนำของ GPU
การจับคู่รายการที่อนุญาตของอุปกรณ์
Vkquality จะตรวจสอบก่อนว่าอุปกรณ์ที่ใช้งานอยู่นั้นรวมอยู่ในอุปกรณ์หรือไม่
และดูว่าอุปกรณ์ใช้ Android เวอร์ชันต่ำสุดและไดรเวอร์ Vulkan หรือไม่
เวอร์ชันที่ระบุไว้ในรายการที่อนุญาตสำหรับอุปกรณ์นั้น หากตรงตามเกณฑ์เหล่านี้
Vk Quality แนะนำ Vulkan โดยแสดงผล
ค่า enum RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH
หากอุปกรณ์อยู่ในรายการที่อนุญาต แต่ใช้เวอร์ชัน Android หรือไดรเวอร์
เวอร์ชันที่ต่ำกว่าค่าต่ำสุดที่ระบุไว้ในรายการที่อนุญาต, Vkquality
แนะนำ OpenGL ES โดยส่งคืน RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER
คำแนะนำ GPU ที่ตรงกัน
หากไม่พบอุปกรณ์ที่ตรงกันในรายการที่อนุญาตของอุปกรณ์ Vkquality จะประเมิน
อนุญาตหรือปฏิเสธคำแนะนำของ GPU เกี่ยวกับโมเดล GPU และเวอร์ชันไดรเวอร์
รายการ หากโมเดล GPU และเวอร์ชันไดรเวอร์ตรงกับข้อมูลใน GPU
Vkquality จะแนะนำ Vulkan โดยส่งคืนฟังก์ชัน
ค่าคงที่ RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH
หากโมเดล GPU และเวอร์ชันไดรเวอร์ตรงกับข้อมูลใน GPU
รายการปฏิเสธคำแนะนำ Vkquality จะแนะนำ OpenGL ES โดยส่งคืน
RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH
คำแนะนำที่ไม่ตรงกับคำแนะนำ
หากไม่พบรายการที่ตรงกัน Vkquality จะแนะนำ Vulkan หากระดับ API ของ Android เป็น
อุปกรณ์ที่ใช้งานอยู่มีค่าเท่ากับหรือสูงกว่าระดับ API ในอนาคตใน
รายการแนะนำ รายการคำแนะนำเริ่มต้นมีระดับ API ในอนาคตเป็น
36 หมายถึง Vkquality ในอุปกรณ์ที่ไม่ตรงกันที่ใช้ API ระดับ 36 ขึ้นไป
จะแสดงผลค่าคงที่ RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID
หากไม่พบรายการที่ตรงกันในรายการที่อนุญาตหรือรายการแนะนำของ GPU ของอุปกรณ์
และระดับ API ของอุปกรณ์อยู่ต่ำกว่าระดับ API ในอนาคต, Vkquality
แนะนำ OpenGL ES โดยส่งคืน RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH
เพิ่มไฟล์ที่เก็บถาวร Vkquality ลงในโปรเจ็กต์ของคุณ
ปลั๊กอิน Vkquality คือไฟล์ VkQuality-1.x.x.aar
ที่อยู่ใน
ไดเรกทอรี Assets/Android/Plugins
ของที่เก็บถาวรแพ็กเกจที่ดาวน์โหลด ฟิลด์
หมายเลขเวอร์ชันของไฟล์ .aar ตรงกับหมายเลขเวอร์ชันของแพ็กเกจ
ชื่อที่เก็บถาวร หากต้องการติดตั้งปลั๊กอิน ให้ทำตามขั้นตอนต่อไปนี้
- คัดลอกไฟล์ .aar ไปยังไดเรกทอรี
Assets/Android/Plugins
ของไฟล์ (สร้างไดเรกทอรีย่อยAndroid
และPlugins
ที่จำเป็นหาก ไม่มีอยู่)
- เลือกไฟล์ปลั๊กอิน
VkQuality-1.x.x
ในลำดับชั้น Project ของ Unity เพื่อเปิดการตั้งค่าการนำเข้าในแผงตัวตรวจสอบ ตรวจสอบว่า เลือกแพลตฟอร์ม Android แล้ว
ใช้กิจกรรมที่กำหนดเองเพื่อโทรหา Vkquality
ต่างจากปลั๊กอินเครื่องมือของ Unity ทั่วไปตรงที่ต้องทำ Vkquality เพื่อให้ได้มาซึ่ง คำแนะนำ API กราฟิกก่อนที่จะเริ่มต้นเครื่องมือ Unity จากนั้นคุณใช้ คุณลักษณะอาร์กิวเมนต์บรรทัดคำสั่งของโปรแกรมเล่น Unity เพื่อตั้งค่า API กราฟิกตามคำแนะนำของ Vk Quality ใน Android ผ่าน อาร์กิวเมนต์บรรทัดคำสั่งกำหนดให้ต้องลบล้างลักษณะการทำงานเริ่มต้นของ UnityPlayerActivity โดยการสร้าง กิจกรรม
หากเกมของคุณใช้กิจกรรมที่กำหนดเองอยู่แล้ว โปรดดูส่วนเพิ่ม Vkquality ลงใน กิจกรรมที่กำหนดเองที่มีอยู่ วิธีสร้างกิจกรรมที่กำหนดเองใหม่สำหรับ ให้ดูที่เพิ่มกิจกรรมที่กำหนดเองลงในโปรเจ็กต์ Unity ขั้นตอนถัดไป
เพิ่มกิจกรรมที่กำหนดเองลงในโปรเจ็กต์ Unity Engine
ตัวอย่างกิจกรรมที่กำหนดเองที่ใช้ Vkquality จะรวมอยู่ในปลั๊กอิน
แพ็กเกจในสกุลเงินAssets/Plugins/Android/VkQualityTestActivity.java
หากต้องการปรับแต่งไฟล์และใช้ในเกม ให้ทำตามขั้นตอนต่อไปนี้
- คัดลอกไฟล์
VkQualityTestActivity.java
ลงใน ไดเรกทอรีAssets/Plugins/Android
- เปลี่ยนชื่อให้เป็นสิ่งที่เหมาะกับเกมของคุณ (เช่น
MyGameActivity.java
) - เปิดไฟล์ในเครื่องมือแก้ไขข้อความ
- เปลี่ยนชื่อชั้นเรียนจาก
VkQualityTestActivity
เป็นชื่อที่คุณตั้งให้ (เช่นMyGameActivity.java
) - เปลี่ยนชื่อแพ็กเกจจาก
com.google.android.games.VkQualityTest
เป็น ตรงกับค่าของช่องชื่อแพ็กเกจในการตั้งค่าโปรเจ็กต์ Unity หมวดหมู่โปรแกรมเล่นในส่วนการตั้งค่าอื่นๆ (ตัวอย่างเช่นcom.mycompany.mygame
) - บันทึกและปิดไฟล์
เพิ่มไฟล์ Manifest ที่กำหนดเองซึ่งอ้างอิงกิจกรรมที่กำหนดเองของคุณและแจ้งให้ Unity วิธีใช้ไฟล์ Manifest ที่กำหนดเอง
- คัดลอกไฟล์
AndroidManifest.xml
จากAssets/Plugins/Android
ไดเรกทอรีของแพ็กเกจปลั๊กอินในAsset/Plugins/Android
ของโครงการของคุณ ไดเรกทอรี - เปิดไฟล์ในเครื่องมือแก้ไขข้อความ
- เปลี่ยนค่าของการตั้งค่า
activity android:name
จากcom.google.android.games.VkQualityTest.VkQualityTestActivity
จะถึง ชื่อแพ็กเกจและกิจกรรมที่คุณใช้ในขั้นตอนก่อนหน้า (เช่นcom.mycompany.mygame.MyGameActivity
) - บันทึกและปิดไฟล์
- เปิดหน้าต่างการตั้งค่า Unity และเลือกการตั้งค่าโปรแกรมเล่น ขยาย ส่วนการตั้งค่าการเผยแพร่ และตรวจสอบไฟล์ Manifest หลักที่กำหนดเอง ช่องทำเครื่องหมาย
ตอนนี้โปรเจ็กต์ของคุณได้รับการตั้งค่าให้ใช้กิจกรรมที่กำหนดเองซึ่งเรียกใช้ Vkquality ที่ เริ่มต้นและเลือก Vulkan หรือ OpenGL ES ตามคำแนะนำ Vkquality
เพิ่ม Vkquality ลงในกิจกรรมที่กำหนดเองที่มีอยู่
หากเกมมีกิจกรรมที่กำหนดเองซึ่งลบล้างค่าเริ่มต้นอยู่แล้ว
UnityPlayerActivity
ผสานรวมคำแนะนำ Vkquality ด้วยการเพิ่ม
รหัสต่อไปนี้:
ขั้นแรก ให้เพิ่มข้อความการนำเข้า Vkquality ลงในรายการการนำเข้าที่ด้านบนของ ไฟล์กิจกรรมที่กำหนดเองมีลักษณะดังนี้
Kotlin
import com.google.android.games.vkquality.VKQuality;
Java
import com.google.android.games.vkquality.VKQuality;
ถัดไป ให้สร้างค่าคงที่ในเนื้อหาของชั้นเรียน Activity
สำหรับ
ตัวเลือก API กราฟิก
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 ดังนี้
Kotlin
private var apiOverride = OVERRIDE_NONE
Java
private int apiOverride = OVERRIDE_NONE;
เพิ่มฟังก์ชันต่อไปนี้ลงในชั้นเรียน Activity
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); } }
เรียกใช้ฟังก์ชัน CheckVkQuality
จากด้านบนของการลบล้าง onCreate()
ก่อนที่จะเรียกใช้การติดตั้งใช้งานคลาสพื้นฐาน
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { CheckVkQuality() super.onCreate(savedInstanceState) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { CheckVkQuality(); super.onCreate(savedInstanceState); }
สุดท้าย ให้เพิ่มการลบล้างของฟังก์ชัน updateUnityCommandLineArguments()
ที่ใช้ค่าของ apiOverride
เพื่อส่งอาร์กิวเมนต์บรรทัดคำสั่งไปยังฟังก์ชัน
เครื่องมือ Unity ที่ระบุ API กราฟิกที่จะใช้ ดังนี้
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; }
ตอนนี้กิจกรรมที่กำหนดเองของคุณจะเรียกใช้ Vkquality เมื่อเริ่มต้นใช้งาน และเลือก Vulkan หรือ OpenGL ES ตามคำแนะนำของ Vkquality
ใช้รายการคำแนะนำที่กำหนดเอง
ระบุไฟล์รายการแนะนำที่กำหนดเองโดยการส่งชื่อไฟล์
ที่มีรายการนี้ไปยัง StartVkQuality()
แทนที่จะส่งสตริงว่าง:
Kotlin
val startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq")
Java
int startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq");
Vkquality จะค้นหาไฟล์ในที่จัดเก็บข้อมูลภายในแอปพลิเคชันของคุณก่อน
ไดเรกทอรี หากไฟล์ไม่ได้อยู่ในที่จัดเก็บข้อมูลภายใน Vkquality จะพยายามโหลด
จากเนื้อหาของ App Bundle หากไฟล์ไม่ได้อยู่ในทั้ง 2 ตำแหน่ง
Vkquality จะแสดงผลค่า enum ERROR_MISSING_DATA_FILE
หากต้องการสร้างไฟล์รายการคำแนะนำที่กำหนดเอง ให้ใช้เครื่องมือแก้ไขรายการ Vkquality เครื่องมือที่อยู่ในที่เก็บของ GitHub เอกสารประกอบสำหรับ เครื่องมืออยู่ใน README