ปลั๊กอินเครื่องมือ Vkquality Unity

ปลั๊กอิน 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 ตรงกับหมายเลขเวอร์ชันของแพ็กเกจ ชื่อที่เก็บถาวร หากต้องการติดตั้งปลั๊กอิน ให้ทำตามขั้นตอนต่อไปนี้

  1. คัดลอกไฟล์ .aar ไปยังไดเรกทอรี Assets/Android/Plugins ของไฟล์ (สร้างไดเรกทอรีย่อย Android และ Plugins ที่จำเป็นหาก ไม่มีอยู่)
ไฟล์ Vkquality .aar ในไดเรกทอรีที่กำหนดของโปรเจ็กต์
รูปที่ 1ไฟล์ .aar ของ Vkquality ในไดเรกทอรีโปรเจ็กต์ที่กำหนด
  1. เลือกไฟล์ปลั๊กอิน VkQuality-1.x.x ในลำดับชั้น Project ของ Unity เพื่อเปิดการตั้งค่าการนำเข้าในแผงตัวตรวจสอบ ตรวจสอบว่า เลือกแพลตฟอร์ม Android แล้ว
รูปที่ 2 การตั้งค่าการนำเข้าแพลตฟอร์มปลั๊กอิน Vkquality
รูปที่ 2 การตั้งค่าการนำเข้าแพลตฟอร์มปลั๊กอิน Vkquality

ใช้กิจกรรมที่กำหนดเองเพื่อโทรหา Vkquality

ต่างจากปลั๊กอินเครื่องมือของ Unity ทั่วไปตรงที่ต้องทำ Vkquality เพื่อให้ได้มาซึ่ง คำแนะนำ API กราฟิกก่อนที่จะเริ่มต้นเครื่องมือ Unity จากนั้นคุณใช้ คุณลักษณะอาร์กิวเมนต์บรรทัดคำสั่งของโปรแกรมเล่น Unity เพื่อตั้งค่า API กราฟิกตามคำแนะนำของ Vk Quality ใน Android ผ่าน อาร์กิวเมนต์บรรทัดคำสั่งกำหนดให้ต้องลบล้างลักษณะการทำงานเริ่มต้นของ UnityPlayerActivity โดยการสร้าง กิจกรรม

หากเกมของคุณใช้กิจกรรมที่กำหนดเองอยู่แล้ว โปรดดูส่วนเพิ่ม Vkquality ลงใน กิจกรรมที่กำหนดเองที่มีอยู่ วิธีสร้างกิจกรรมที่กำหนดเองใหม่สำหรับ ให้ดูที่เพิ่มกิจกรรมที่กำหนดเองลงในโปรเจ็กต์ Unity ขั้นตอนถัดไป

เพิ่มกิจกรรมที่กำหนดเองลงในโปรเจ็กต์ Unity Engine

ตัวอย่างกิจกรรมที่กำหนดเองที่ใช้ Vkquality จะรวมอยู่ในปลั๊กอิน แพ็กเกจในสกุลเงินAssets/Plugins/Android/VkQualityTestActivity.java หากต้องการปรับแต่งไฟล์และใช้ในเกม ให้ทำตามขั้นตอนต่อไปนี้

  1. คัดลอกไฟล์ VkQualityTestActivity.java ลงใน ไดเรกทอรี Assets/Plugins/Android
  2. เปลี่ยนชื่อให้เป็นสิ่งที่เหมาะกับเกมของคุณ (เช่น MyGameActivity.java)
  3. เปิดไฟล์ในเครื่องมือแก้ไขข้อความ
  4. เปลี่ยนชื่อชั้นเรียนจาก VkQualityTestActivity เป็นชื่อที่คุณตั้งให้ (เช่น MyGameActivity.java)
  5. เปลี่ยนชื่อแพ็กเกจจาก com.google.android.games.VkQualityTest เป็น ตรงกับค่าของช่องชื่อแพ็กเกจในการตั้งค่าโปรเจ็กต์ Unity หมวดหมู่โปรแกรมเล่นในส่วนการตั้งค่าอื่นๆ (ตัวอย่างเช่น com.mycompany.mygame)
  6. บันทึกและปิดไฟล์

เพิ่มไฟล์ Manifest ที่กำหนดเองซึ่งอ้างอิงกิจกรรมที่กำหนดเองของคุณและแจ้งให้ Unity วิธีใช้ไฟล์ Manifest ที่กำหนดเอง

  1. คัดลอกไฟล์ AndroidManifest.xml จาก Assets/Plugins/Android ไดเรกทอรีของแพ็กเกจปลั๊กอินใน Asset/Plugins/Android ของโครงการของคุณ ไดเรกทอรี
  2. เปิดไฟล์ในเครื่องมือแก้ไขข้อความ
  3. เปลี่ยนค่าของการตั้งค่า activity android:name จาก com.google.android.games.VkQualityTest.VkQualityTestActivity จะถึง ชื่อแพ็กเกจและกิจกรรมที่คุณใช้ในขั้นตอนก่อนหน้า (เช่น com.mycompany.mygame.MyGameActivity)
  4. บันทึกและปิดไฟล์
  5. เปิดหน้าต่างการตั้งค่า Unity และเลือกการตั้งค่าโปรแกรมเล่น ขยาย ส่วนการตั้งค่าการเผยแพร่ และตรวจสอบไฟล์ Manifest หลักที่กำหนดเอง ช่องทำเครื่องหมาย
รูปที่ 3 ตัวเลือกไฟล์ Manifest หลักที่กำหนดเองในการตั้งค่าโปรแกรมเล่น Unity
รูปที่ 3ตัวเลือกไฟล์ Manifest หลักที่กำหนดเองในการตั้งค่าโปรแกรมเล่น Unity

ตอนนี้โปรเจ็กต์ของคุณได้รับการตั้งค่าให้ใช้กิจกรรมที่กำหนดเองซึ่งเรียกใช้ 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