Android Performance Tuner (Unity)

In diesem Leitfaden wird beschrieben, wie Sie mit einem Unity-Plug-in Frame Time-Daten ab Unity 2017.4 aufzeichnen und hochladen.

Weitere Informationen zu Spiel-Engines, die C oder C++ verwenden, finden Sie im Leitfaden für native Spiel-Engines.

Hintergrund

Eine wichtige Komponente des Spielerlebnisses ist die Renderingleistung. Die Rendering-Leistung ist ein Ergebnis der folgenden beiden Eingaben:

  • Framerate: Die Häufigkeit, mit der ein Frame gezeichnet wird.
  • Einstellungen für die grafische Qualität: Die Grafikqualität, mit der ein Frame dargestellt wird, einschließlich der Simulationsqualität sowie der Grafik.

Für Spiele wird eine gute Rendering-Leistung so definiert:

  • Sie sorgen für eine stabile, konsistente Framerate (d. h. den Prozentsatz der Frames, die mit der gewünschten Frequenz gerendert werden).
  • Frames mit der höchstmöglichen Frequenz unter Aufrechterhaltung der Stabilität rendern, normalerweise je nach Art des Spiels 30 oder 60 fps.
  • Maximieren des Detailgrads für einen Nutzer angesichts seiner Bildschirmgröße und -dichte unter Einhaltung einer gewünschten, stabilen Framerate.

Die Android Frame Pacing-Bibliothek schränkt einen Großteil der Varianz der Framezeiten ein und bietet so eine stabile Framerate für Spiele. Die verbleibende Variante der Framezeiten ist auf den Detaillierungsgrad, der während bestimmter Spielszenen angezeigt wird, und die grafischen Fähigkeiten des Geräts zurückzuführen. Mit dem Android Performance Tuner kannst du Zeiten während des Spiels bestimmen, zu denen die Frame Time langsamer oder schneller als dein Ziel ist, und diese Probleme und Optimierungsmöglichkeiten in Beziehung setzen:

  • Spezifische Qualitätseinstellungen
  • Bestimmte Szenen in deinem Spiel
  • Bestimmte Gerätemodelle oder technische Daten

Daten aufzeichnen und hochladen

Die Abstimmung Fork-Bibliothek benötigt eine ihrer Tick-Funktionen, die jeden Frame von der Android Frame Pacing-Bibliothek (oder von der Unity-Engine bei älteren Versionen von Unity, in denen die Frame Pacing Library vorhanden ist) aufgerufen wird. Innerhalb der Bibliothek werden diese Tick-Informationen in Histogrammen zusammengefasst, die dann regelmäßig über einen HTTP-Endpunkt bei Google Play hochgeladen werden. Jeder Tick wird als mit einem Instrumentenschlüssel und einer Anmerkung verknüpft. Anmerkungen werden mit dem Unity-Plug-in definiert.

Instrumentenschlüssel

Ein Instrumentenschlüssel gibt an, woher der Tick im Frame stammt. Er ist eine Ganzzahl, die an jeden Tick-Funktionsaufruf übergeben werden muss. Dies erfolgt automatisch durch das Unity-Plug-in. Wenn die Option „Optimierte Frame-Taktung“ in den Unity-Einstellungen für Ihr Spiel (verfügbar ab Version 2019.3.14 von Unity) aktiviert ist, verwendet der Android Performance Tuner Informationen aus der Android Frame Pacing-Bibliothek, um erweiterte Messwerte zu melden.

Anmerkungen

Anmerkungen liefern Kontextinformationen zu den Aktionen Ihres Spiels, wenn ein Tick aufgezeichnet wird. Eine Annotation könnte beispielsweise folgende Elemente identifizieren:

  • Das aktuelle Level in einem Spiel
  • Eine bestimmte Szene wird geladen
  • Ein „großer Chef“ auf dem Bildschirm
  • Sonstige relevante Informationen zum Spielstatus

Anmerkungen werden in einem vom Unity-Plug-in bereitgestellten Dialogfeld definiert.

Intern verwendet die Abstimmung Fork-Bibliothek das Protokollpufferformat von Google, um Anmerkungen und Parameter zur Grafikqualität zu speichern. Dies ist ein klar definiertes, mehrsprachiges Protokoll für erweiterbare, strukturierte Daten. Weitere Informationen finden Sie in der Dokumentation zu Protokollzwischenspeichern.

Parameter zur Grafikqualität

Parameter zur Grafikqualität beeinflussen die Leistung und Grafikqualität Ihres Spiels, z. B. den Detaillierungsgrad des Mesh-Netzwerks, die Texturauflösung und die Anti-Aliasing-Methode. Wie Anmerkungen werden Parameter zur Grafikqualität in einem Dialogfeld des Unity-Plug-ins definiert.

Arbeitsspeicher und CPU-Overhead

Der gesamte von der Abstimmung Fork-Bibliothek verwendete Speicher wird bei der Initialisierung zugewiesen, um Überraschungen während des Spiels zu vermeiden. Die Größe der Daten hängt von der Anzahl der Instrumentenschlüssel, der Anzahl der möglichen Annotationen und der Anzahl der Buckets im jeweiligen Histogramm ab. Sie ist ein Vielfaches davon multipliziert mit 4 Byte für jeden Bucket. Außerdem sind zwei Kopien aller Histogramme vorhanden, um die Einreichung in doppelt gepufferter Form zu ermöglichen.

Die Übertragung erfolgt in einem separaten Thread und blockiert keine Tick-Aufrufe. Wenn keine Uploadverbindung verfügbar ist, wird die Einreichung für den späteren Upload in die Warteschlange gestellt.

Der Verarbeitungsaufwand für das Aufrufen einer Tickfunktion ist gering: Sie berechnet einfach einen Index in das Array von Histogramm-Buckets und erhöht die Zahl der Ganzzahlen.

Webanfragen

Die Bibliothek stellt zwei Arten von Anfragen an den Serverendpunkt:

  • Eine generateTuningParameters-Anfrage bei der Initialisierung
  • Regelmäßig während des Spiels eine uploadTelemetry-Anfrage zum Senden von Daten an den Server

Offline-Spieler

Wenn bei der Initialisierung keine Verbindung verfügbar ist, wird die Anfrage mehrmals mit zunehmender Backoff-Zeit wiederholt. Wenn beim Upload keine Verbindung besteht, wird der Upload im Cache gespeichert. Uploads werden als Dateien im temporären Speicher gespeichert.

Voraussetzungen

Wenn Sie das Plug-in in Ihrem Spiel verwenden möchten, benötigen Sie eine unterstützte Version von Unity:

  • Unity-Version 2017.4 oder höher und .NET Version 4.6
  • Zur Verwendung von APK-Erweiterungsdateien ist Unity 2018.2 erforderlich
  • Für verbesserte Frame-Taktung und GPU-Messungen ist die Unity-Version 2019.3.14 oder höher erforderlich
  • Zur Unterstützung von Addressables-Szenen sind Unity 2019.3 oder höher und das Addressables-Paket 1.19.4 oder höher erforderlich.

Android Performance Tuner in Unity einbinden

Informationen zur Einbindung des Android Performance Tuner in Unity finden Sie unter API aktivieren.