פלאגין של Vkquality Unity למנוע

הפלאגין Vk Quality עבור המנוע של Unity מספק המלצות בזמן ההשקה של ה-API הגרפי — Vulkan או OpenGL ES — לשימוש במשחק מכשירים.

ההמלצה של Vk Quality היא המלצה על Vulkan בקבוצת מכשירים מוגבלת יותר בהשוואה ל-Unity כברירת המחדל של רשימת ההיתרים של המנוע. שימוש ב-Vk Quality כדי ליהנות מיתרונות הביצועים Vulkan עם הגבלת השימוש ב-Vulkan למכשירים חדשים יותר עם גרפיקה חדשה יותר נהגים, מה שמגביל את החשיפה של המשחק לבעיות של נהגים. Vkquality בלבד מעניק המלצות באיכות גבוהה, ולא מבטיח שעדיין ניתן נתקלתם בבעיות שקשורות לנהגים במכשירים מומלצים. ב-Vkquality יש תמיכה ברשימות מותאמות אישית, שמאפשר להוסיף או להסיר המלצות למכשיר משחק.

הפעלת Vulkan במשחק מנוע ה-Unity

כדי להשתמש ב-Vk Quality, המשחק שלך צריך לכלול גם את OpenGL ES וגם את כלי הרינדור Vulkan מופעל בהגדרות הפרויקט ב-Unity. הפעל את הגורמים לעיבוד באמצעות אוטומטי האפשרות Graphics API או על ידי הגדרה ידנית של ממשקי ה-API הגרפיים.

הורדת הפלאגין Vk Quality עבור מנוע Unity

מורידים את הפלאגין Vkquality מ-GitHub. הפלאגין הוא תואמים ל-Unity מגרסה 2021 ואילך. כדי להפעיל, משתמשים ב-Unity 2021 LTS ואילך Vulkan ב-Android. חבילת יישומי הפלאגין מכילה פרויקט בסיסי לדוגמה שמשתמש את הפלאגין כדי להגדיר את ה-API הגרפי בזמן ההפעלה ולאחר מכן מציג מחרוזת המוגדרת ו-API של הגרפיקה הפעיל במכשיר.

ניהול של רשימת ההמלצות ב-Vk Quality Vulkan

ב-Vkquality יש רשימת המלצות שמוגדרת כברירת מחדל לגבי מכשירים נתמכים. עבור מידע על השימוש ברשימת המלצות מותאמת אישית זמין במאמר שימוש ברשימת המלצות מותאמת אישית רשימת המלצות.

רשימת ההמלצות כוללת שלוש קטגוריות:

  • רשימת היתרים של מכשירי Vulkan
  • רשימת היתרים של המלצות לגבי GPU
  • רשימת הדחייה של המלצות ל-GPU

התאמות לרשימת ההיתרים במכשיר

התכונה Vk Quality בודקת קודם אם המכשיר הפעיל כלול במכשיר והאם במכשיר פועלת גרסת Android המינימלית ומנהל התקן Vulkan הגרסה שצוינה ברשימת ההיתרים עבור המכשיר הזה. אם הקריטריונים האלה מתקיימים, ב-Vkquality ממליצים על Vulkan על ידי החזרת ערך enum RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH.

אם המכשיר נמצא ברשימת ההיתרים, אבל פועלת בו גרסת Android או מנהל התקן של Android גרסה נמוכה מהרמה המינימלית שצוינה עבורו ברשימת ההיתרים, Vk Quality מומלץ להשתמש ב-OpenGL ES על ידי החזרת הערך RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER.

התאמות להמלצות לגבי GPU

אם לא נמצאה התאמה למכשירים ברשימת ההיתרים של המכשירים, ב-Vkquality תתבצע הערכה של מודל ה-GPU וגרסת מנהל ההתקן בהתאם להמלצה לגבי ה-GPU אישור ודחייה רשימות. אם מודל ה-GPU וגרסת מנהל ההתקן תואמים לרשומה ב-GPU של ההמלצות, ב-Vkquality ממליצים על Vulkan על ידי החזרת קבוע של enum RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH.

אם מודל ה-GPU וגרסת מנהל ההתקן תואמים לרשומה ב-GPU רשימת ההמלצות שנדחו, Vkquality ממליץ על OpenGL ES על ידי חזרה RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH

המלצות ללא התאמה

אם לא נמצאו התאמות, Vk Quality ממליץ על Vulkan אם רמת ה-API של Android היא המכשיר שפועל שווה לרמת ה-API העתידית או גבוהה ממנה רשימת המלצות. ברשימת ההמלצות שמוגדרת כברירת מחדל רמת ה-API העתידית היא 36, כלומר, במכשירים ללא התאמה עם רמת API 36 ומעלה, Vk Quality מחזירה את קבוע הטיפוס RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID.

אם לא נמצאו התאמות ברשימת ההיתרים של המכשיר או ברשימות ההמלצות של ה-GPU, ורמת ה-API של המכשיר נמוכה מרמת ה-API העתידית, Vk Quality מומלץ להשתמש ב-OpenGL ES על ידי החזרת הערך RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH.

הוספת קובץ הארכיון Vk Quality לפרויקט

הפלאגין Vk Quality הוא הקובץ VkQuality-1.x.x.aar שנמצא הספרייה Assets/Android/Plugins של ארכיון החבילות שהורדתם. בפועל מספר הגרסה של קובץ ה- .aar תואם למספר הגרסה של החבילה שם הארכיון. כדי להתקין את הפלאגין:

  1. מעתיקים את קובץ ה- .aar לספרייה Assets/Android/Plugins של פרויקט. (צריך ליצור את ספריות המשנה Android ו-Plugins הנדרשות, אם הן לא קיימות).
קובץ ה-Vkquality .aar בספריית הפרויקט הנדרשת.
איור 1.קובץ ה-Vkquality .aar בספריית הפרויקט הנדרשת.
  1. בחירת קובץ הפלאגין VkQuality-1.x.x בהיררכיית Project של Unity כדי להציג את הגדרות הייבוא בחלונית מפקח. מוודאים שהמאפיינים פלטפורמת Android מסומנת.
איור 2. הגדרות הייבוא של פלטפורמת הפלאגין Vk Quality.
איור 2. הגדרות הייבוא של פלטפורמת הפלאגין Vk Quality.

שימוש בפעילות מותאמת אישית כדי לקרוא ל-Vk Quality

בשונה מיישומי פלאגין רגילים של Unity, יש לבצע את Vk Quality כדי לקבל ההמלצה ל-GPU API לפני אתחול מנוע ה-Unity. לאחר מכן משתמשים התכונה ארגומנטים בשורת הפקודה של נגן Unity כדי להגדיר Graphics API מבוסס על המלצת Vk Quality. ב-Android, מתבצעת העברה חייבים לשנות את התנהגות ברירת המחדל של הארגומנטים בשורת הפקודה UnityPlayerActivity על ידי יצירת רכיב מותאם אישית פעילות.

אם במשחק שלך כבר נעשה שימוש בפעילות מותאמת אישית, ניתן לעיין בקטע הוספת Vkquality קטע קיים של פעילות מותאמת אישית. כדי ליצור פעילות מותאמת אישית חדשה במאמר הוספת פעילות מותאמת אישית לפרויקט ב-Unity שבהמשך.

הוספת פעילות בהתאמה אישית לפרויקט Engine ב-Unity

פעילות מותאמת אישית לדוגמה שמשתמשת ב-Vk Quality נכללת בפלאגין חבילה ב-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 ל- תואם לערך בשדה Package Name שמופיע בהגדרות הפרויקט של Unity קטגוריית נגן בקטע הגדרות אחרות (לדוגמה, com.mycompany.mygame).
  6. שומרים וסוגרים את הקובץ.

צריך להוסיף קובץ מניפסט בהתאמה אישית שמפנה לפעילות המותאמת אישית שלך וליידע את Unity כדי להשתמש בקובץ המניפסט המותאם אישית:

  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 ובוחרים בהגדרות נגן. להרחיב בקטע הגדרות פרסום, ובודקים את המניפסט הראשי המותאם אישית תיבת הסימון.
איור 3.האפשרות של מניפסט ראשי בהתאמה אישית בהגדרות של Unity Player.
איור 3. האפשרות מניפסט ראשי בהתאמה אישית בהגדרות הנגן של Unity.

הפרויקט שלך מוגדר עכשיו לשימוש בפעילות המותאמת אישית שקוראת ל-Vk Quality ב- ובוחרים ב-Vulkan או OpenGL ES על סמך המלצת Vk Quality.

הוספת Vkquality לפעילות מותאמת אישית קיימת

אם במשחק כבר יש פעילות מותאמת אישית שעוקפת את ברירת המחדל UnityPlayerActivity, כדאי לשלב את ההמלצות של Vk Quality על ידי הוספת הקוד הבא:

קודם כול, מוסיפים את הצהרת הייבוא 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;
}

הפעילות בהתאמה אישית קוראת עכשיו ל-Vk Quality בזמן ההפעלה ובוחרת ב-Vulkan או OpenGL ES על סמך ההמלצה של Vk Quality.

שימוש ברשימת המלצות מותאמת אישית

מציינים קובץ של רשימת המלצות בהתאמה אישית על ידי העברת שם הקובץ שמכיל את הרשימה StartVkQuality() במקום להעביר מחרוזת ריקה:

Kotlin

val startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq")

Java

int startResult = vkQuality.StartVkQuality("CUSTOM_FILE_NAME.vkq");

Vkquality מחפש תחילה את הקובץ באחסון הפנימי של האפליקציה שלך אם הקובץ לא נמצא באחסון פנימי, Vkquality מנסה לטעון את מנכס ה-App Bundle. אם הקובץ לא נמצא באף אחד מהמיקומים, Vk Quality מחזירה את הערך enum ERROR_MISSING_DATA_FILE.

כדי ליצור קובץ של רשימת המלצות בהתאמה אישית, משתמשים בעורך רשימת ההמלצות של Vk Quality שנמצא במאגר של GitHub. תיעוד עבור נמצא ב-README.