VkQuality Unity-Engine-Plug-in

Das VkQuality-Plug-in für die Unity-Engine bietet Empfehlungen zum Startzeitpunkt Grafik-API (Vulkan oder OpenGL ES) hinzugefügt, die ihr für euer Spiel auf bestimmten Geräte.

VkQuality empfiehlt Vulkan auf weniger Geräten als Unity Standard-Zulassungsliste der Suchmaschine. Nutzen Sie VkQuality, um die Leistungsvorteile von Vulkan wird dabei nur auf neueren Geräten mit neueren Grafiken verwendet. Treiberproblemen, wodurch die Anfälligkeit Ihres Spiels durch Treiberprobleme eingeschränkt wird. Nur VkQuality qualitativ hochwertige Empfehlungen gibt, keine Garantie, da es immer noch möglich ist, auf den empfohlenen Geräten Treiberprobleme haben. VkQuality unterstützt benutzerdefinierte Listen, Hier kannst du Empfehlungen für Geräte hinzufügen oder entfernen Spiel.

Vulkan in deinem Unity-Engine-Spiel aktivieren

Für VkQuality muss dein Spiel sowohl den OpenGL ES- als auch den Vulkan-Renderer haben in den Unity-Projekteinstellungen aktiviert. Aktivieren Sie die Renderer mithilfe der Funktion Automatisch Graphics API aktivieren oder die Grafik-APIs manuell festlegen.

VkQuality-Plug-in für Unity-Engine herunterladen

Laden Sie das VkQuality-Plug-in von GitHub herunter. Das Plug-in ist kompatibel mit Unity 2021 und höher. Zum Aktivieren Unity 2021 LTS oder höher verwenden Vulkan auf Android. Das Plug-in-Paket enthält ein einfaches Beispielprojekt, um die Grafik-API beim Start festzulegen, und zeigt dann die Zeichenfolge die aktive Grafik-API des Geräts.

VkQuality-Vulkan-Empfehlungsliste verwalten

VkQuality enthält eine standardmäßige Liste mit Empfehlungen für unterstützte Geräte. Für Weitere Informationen zur Verwendung Empfehlungsliste.

Die Liste der Empfehlungen umfasst drei Kategorien:

  • Zulassungsliste für Vulkan-Geräte
  • Zulassungsliste für GPU-Empfehlungen
  • Sperrliste für GPU-Empfehlungen

Übereinstimmungen mit der Zulassungsliste für Geräte

VkQuality prüft zuerst, ob das aktive Gerät im Gerät erlaubt ist und ob darauf die mindestens erforderliche Android-Version und der Vulkan-Treiber installiert sind. die in der Zulassungsliste für dieses Gerät angegeben ist. Sind diese Kriterien erfüllt, VkQuality empfiehlt Vulkan, indem es den RECOMMENDATION_VULKAN_BECAUSE_DEVICE_MATCH-Enum-Wert.

Wenn das Gerät auf der Zulassungsliste steht, aber eine Android-Version oder ein Treiber ausgeführt wird Version unter dem in der Zulassungsliste angegebenen Mindestwert (VkQuality) empfiehlt OpenGL ES, indem du RECOMMENDATION_GLES_BECAUSE_OLD_DRIVER zurückgibt.

GPU-Empfehlung stimmt überein

Wenn keine Geräteübereinstimmung auf der Zulassungsliste für Geräte gefunden wird, bewertet VkQuality die GPU-Modell und Treiberversion anhand der GPU-Empfehlung zum Zulassen und Ablehnen Listen. Wenn das GPU-Modell und die Treiberversion mit einem Eintrag in der GPU übereinstimmen Zulassungsliste der Empfehlungen verwendet, empfiehlt VkQuality Vulkan, indem die RECOMMENDATION_VULKAN_BECAUSE_PREDICTION_MATCH-Enum-Konstante.

Wenn das GPU-Modell und die Treiberversion mit einem Eintrag in der GPU übereinstimmen Empfehlung ablehnen, empfiehlt VkQuality OpenGL ES RECOMMENDATION_GLES_BECAUSE_PREDICTION_MATCH

Empfehlungen ohne Übereinstimmung

Wenn keine Übereinstimmungen gefunden werden, empfiehlt VkQuality Vulkan, wenn das Android-API-Level Das laufende Gerät ist gleich oder höher als das Future API-Level in der Empfehlungsliste. Die Standardempfehlungsliste hat das zukünftige API-Level 36, d. h. auf nicht übereinstimmenden Geräten mit API-Level 36 oder höher, VkQuality gibt die Enum-Konstante RECOMMENDATION_VULKAN_BECAUSE_FUTURE_ANDROID zurück.

Wenn keine Übereinstimmungen auf der Zulassungsliste für Geräte oder GPU-Empfehlungslisten gefunden werden, und das API-Level des Geräts unter dem Future-API-Level „VkQuality“ liegt empfiehlt OpenGL ES, indem du RECOMMENDATION_GLES_BECAUSE_NO_DEVICE_MATCH zurückgibt.

VkQuality-Archivdatei Ihrem Projekt hinzufügen

Das VkQuality-Plug-in ist die Datei VkQuality-1.x.x.aar im Assets/Android/Plugins des heruntergeladenen Paketarchivs. Die tatsächlichen Versionsnummer der AAR-Datei stimmt mit der Versionsnummer des Pakets überein Archivnamen. So installieren Sie das Plug-in:

  1. Kopieren Sie die AAR-Datei in das Verzeichnis Assets/Android/Plugins Ihrer Projekt arbeiten. (Erstellen Sie die erforderlichen Unterverzeichnisse Android und Plugins, falls diese vorhanden sind. nicht existieren.)
<ph type="x-smartling-placeholder">
</ph> Die AAR-Datei von VkQuality im erforderlichen Projektverzeichnis.
Abbildung 1: Die AAR-Datei von VkQuality im erforderlichen Projektverzeichnis
  1. Wählen Sie in der Projekthierarchie von Unity die Plug-in-Datei VkQuality-1.x.x aus. um die Importeinstellungen im Bereich Inspector aufzurufen. Stellen Sie sicher, dass die Android-Plattform aktiviert ist.
<ph type="x-smartling-placeholder">
</ph> Abbildung 2. Die Einstellungen für den Plattformimport des VkQuality-Plug-ins.
Abbildung 2. Die Einstellungen für den Plattformimport des VkQuality-Plug-ins.

VkQuality mithilfe einer benutzerdefinierten Aktivität aufrufen

Im Gegensatz zu typischen Unity-Engine-Plug-ins muss VkQuality ausgeführt werden, um eine Grafik-API-Empfehlung, bevor die Unity-Engine initialisiert wird. Anschließend verwenden Sie die Befehlszeilenargumente des Unity-Players, Grafik-API basierend auf der VkQuality-Empfehlung. Unter Android kann die Übergabe Befehlszeilenargumente erfordern, dass das Standardverhalten UnityPlayerActivity durch Erstellen eines benutzerdefinierten Aktivitäten

Wenn in deinem Spiel bereits eine benutzerdefinierte Aktivität verwendet wird, lies den Artikel VkQuality zu einer vorhandenen benutzerdefinierten Aktivitäten angezeigt. So erstellen Sie eine neue benutzerdefinierte Aktivität für Ihr Weitere Informationen finden Sie unter Benutzerdefinierte Aktivität zum Unity-Projekt hinzufügen (siehe unten).

Benutzerdefinierte Aktivität zum Unity-Engine-Projekt hinzufügen

Eine benutzerdefinierte Aktivität, die VkQuality verwendet, ist im -Plug-in enthalten. Paket in Assets/Plugins/Android/VkQualityTestActivity.java. So passen Sie die Datei an und verwenden sie in Ihrem Spiel:

  1. Kopieren Sie die Datei VkQualityTestActivity.java in Ihr Assets/Plugins/Android-Verzeichnis.
  2. Benennen Sie ihn in einen für Ihr Spiel geeigneten Namen um, z. B. MyGameActivity.java.
  3. Öffnen Sie die Datei in einem Texteditor.
  4. Ändern Sie den Kursnamen von VkQualityTestActivity in den Namen, den Sie dem -Datei (z. B. MyGameActivity.java).
  5. Ändere den Paketnamen von com.google.android.games.VkQualityTest zu Er muss mit dem Wert im Feld Package Name in den Unity-Projekteinstellungen übereinstimmen unter Weitere Einstellungen die Kategorie Spieler, z. B. com.mycompany.mygame.
  6. Speichern und schließen Sie die Datei.

Fügen Sie eine benutzerdefinierte Manifestdatei hinzu, die auf Ihre benutzerdefinierte Aktivität verweist, und teilen Sie Unity mit So verwenden Sie Ihre benutzerdefinierte Manifestdatei:

  1. Kopieren Sie die Datei AndroidManifest.xml aus dem Assets/Plugins/Android des Plug-in-Pakets in die Asset/Plugins/Android Ihres Projekts ein. -Verzeichnis.
  2. Öffnen Sie die Datei in einem Texteditor.
  3. Ändern Sie den Wert der Einstellung activity android:name von com.google.android.games.VkQualityTest.VkQualityTestActivity in den Paket- und Aktivitätsnamen, die Sie in den vorherigen Schritten verwendet haben, z. B. com.mycompany.mygame.MyGameActivity.
  4. Speichern und schließen Sie die Datei.
  5. Öffnen Sie das Unity-Einstellungsfenster und wählen Sie die Player-Einstellungen aus. Maximieren im Bereich Veröffentlichungseinstellungen und überprüfen Sie das Custom Main Manifest (Benutzerdefiniertes Hauptmanifest). .
<ph type="x-smartling-placeholder">
</ph> Abbildung 3: Option „Custom Main Manifest“ in den Einstellungen des Unity Players
Abbildung 3: Option Benutzerdefiniertes Hauptmanifest in den Player-Einstellungen von Unity

Ihr Projekt ist jetzt für die Verwendung der benutzerdefinierten Aktivität eingerichtet, die VkQuality unter und wählt basierend auf der VkQuality-Empfehlung Vulkan oder OpenGL ES aus.

VkQuality zu einer vorhandenen benutzerdefinierten Aktivität hinzufügen

Wenn es in Ihrem Spiel bereits eine benutzerdefinierte Aktivität gibt, die die Standardaktivität überschreibt UnityPlayerActivity, integriere VkQuality-Empfehlungen, indem du die folgenden Code:

Fügen Sie zuerst die VkQuality-Importanweisung zur Liste der Importe oben der benutzerdefinierten Aktivitätsdatei:

Kotlin

import com.google.android.games.vkquality.VKQuality;

Java

import com.google.android.games.vkquality.VKQuality;

Erstellen Sie als Nächstes einige Konstanten im Text der Activity-Klasse für die Grafik-API-Auswahlmöglichkeiten:

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;

Erstellen Sie eine Variable, um die API-Auswahl zu verfolgen:

Kotlin

private var apiOverride = OVERRIDE_NONE

Java

private int apiOverride = OVERRIDE_NONE;

Fügen Sie der Activity-Klasse die folgende Funktion hinzu:

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-Funktion über eine onCreate()-Überschreibung aufrufen , bevor Sie die Implementierung der Basisklasse aufrufen:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  CheckVkQuality()
  super.onCreate(savedInstanceState)
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    CheckVkQuality();
    super.onCreate(savedInstanceState);
}

Fügen Sie abschließend die updateUnityCommandLineArguments()-Funktion der den Wert von apiOverride verwendet, um ein Befehlszeilenargument an die Unity-Engine, die angibt, welche Grafik-API verwendet werden soll:

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;
}

Bei deiner benutzerdefinierten Aktivität wird jetzt beim Start VkQuality aufgerufen und es wird entweder Vulkan oder OpenGL ausgewählt. ES basierend auf der VkQuality-Empfehlung.

Benutzerdefinierte Empfehlungsliste verwenden

Geben Sie eine Datei mit einer benutzerdefinierten Empfehlungsliste an, indem Sie den Namen der Datei übergeben an StartVkQuality(), anstatt einen leeren String zu übergeben:

Kotlin

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

Java

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

VkQuality sucht zuerst im internen Speicher der Anwendung nach der Datei -Verzeichnis. Befindet sich die Datei nicht im internen Speicher, versucht VkQuality, den aus den Assets Ihres App-Bundles aus. Wenn sich die Datei an keinem der beiden Speicherorte befindet, VkQuality gibt den Enum-Wert ERROR_MISSING_DATA_FILE zurück.

Verwenden Sie den VkQuality-Listen-Editor, um eine benutzerdefinierte Datei mit einer Liste von Empfehlungen zu erstellen. im GitHub-Repository. Dokumentation für die befindet sich in der README-Datei.