הפלאגין 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 תואם למספר הגרסה של החבילה
שם הארכיון. כדי להתקין את הפלאגין:
- מעתיקים את קובץ ה- .aar לספרייה
Assets/Android/Plugins
של פרויקט. (צריך ליצור את ספריות המשנהAndroid
ו-Plugins
הנדרשות, אם הן לא קיימות).
![קובץ ה-Vkquality .aar בספריית הפרויקט הנדרשת.](https://developer.android.com/static/images/games/engines/unity/unity-vkquality-unityassets.png?authuser=0&hl=he)
- בחירת קובץ הפלאגין
VkQuality-1.x.x
בהיררכיית Project של Unity כדי להציג את הגדרות הייבוא בחלונית מפקח. מוודאים שהמאפיינים פלטפורמת Android מסומנת.
![איור 2. הגדרות הייבוא של פלטפורמת הפלאגין Vk Quality.](https://developer.android.com/static/images/games/engines/unity/unity-vkquality-unityplugin.png?authuser=0&hl=he)
שימוש בפעילות מותאמת אישית כדי לקרוא ל-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
.
כדי להתאים אישית את הקובץ ולהשתמש בו במשחק שלכם, מבצעים את השלבים הבאים:
- מעתיקים את הקובץ
VkQualityTestActivity.java
אל הספרייהAssets/Plugins/Android
. - שנו את השם שלהם לשם שמתאים למשחק (לדוגמה,
MyGameActivity.java
). - פותחים את הקובץ בכלי לעריכת טקסט.
- משנים את שם הכיתה מ-
VkQualityTestActivity
לשם שנתתם לו. (לדוגמה,MyGameActivity.java
). - שינוי שם החבילה מ-
com.google.android.games.VkQualityTest
ל- תואם לערך בשדה Package Name שמופיע בהגדרות הפרויקט של Unity קטגוריית נגן בקטע הגדרות אחרות (לדוגמה,com.mycompany.mygame
). - שומרים וסוגרים את הקובץ.
צריך להוסיף קובץ מניפסט בהתאמה אישית שמפנה לפעילות המותאמת אישית שלך וליידע את Unity כדי להשתמש בקובץ המניפסט המותאם אישית:
- מעתיקים את הקובץ
AndroidManifest.xml
מ-Assets/Plugins/Android
ספרייה של חבילת יישומי הפלאגין ב-Asset/Plugins/Android
של הפרויקט שלך - פותחים את הקובץ בכלי לעריכת טקסט.
- יש לשנות את הערך של ההגדרה
activity android:name
מ-com.google.android.games.VkQualityTest.VkQualityTestActivity
עד שמות החבילות והפעילויות שבהם השתמשתם בשלבים הקודמים (לדוגמה,com.mycompany.mygame.MyGameActivity
). - שומרים וסוגרים את הקובץ.
- פותחים את חלון ההגדרות של Unity ובוחרים בהגדרות נגן. להרחיב בקטע הגדרות פרסום, ובודקים את המניפסט הראשי המותאם אישית תיבת הסימון.
![איור 3.האפשרות של מניפסט ראשי בהתאמה אישית בהגדרות של Unity Player.](https://developer.android.com/static/images/games/engines/unity/unity-vkquality-unitymanifest.png?authuser=0&hl=he)
הפרויקט שלך מוגדר עכשיו לשימוש בפעילות המותאמת אישית שקוראת ל-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.