Auf dieser Seite wird beschrieben, wie Sie die Bibliothek in Ihrem Spielcode initialisieren und prüfen, ob Daten in Google Play hochgeladen werden. Weitere Informationen zu bestimmten Bibliotheksfunktionen finden Sie in der Referenzdokumentation.
Bibliothek initialisieren
Initialisieren Sie die Bibliothek in einer Initialisierungsmethode am Anfang Ihres Spiels, indem Sie AndroidPerformanceTuner
instanziieren und die Methode Start()
aufrufen:
using Google.Android.PerformanceTuner;
using UnityEngine;
public class SomeBehaviour : MonoBehaviour
{
AndroidPerformanceTuner<FidelityParams, Annotation> tuner =
new AndroidPerformanceTuner<FidelityParams, Annotation>();
void Start()
{
ErrorCode startErrorCode = tuner.Start();
Debug.Log("Android Performance Tuner started with code: " + startErrorCode);
tuner.onReceiveUploadLog += request =>
{
Debug.Log("Telemetry uploaded with request name: " + request.name);
};
}
}
Dieser Code reicht aus, um den Android Performance Tuner zu starten und Ihr Spiel zu instrumentieren. Die Log-Anweisungen geben an, wann der Android Performance Tuner gestartet wurde und wann Telemetriedaten in die Google Play Console APIs hochgeladen wurden. Später finden Sie diese Anweisungen im Log, um zu prüfen, ob das Plug-in ordnungsgemäß funktioniert.
Späte Initialisierung (nur Vulkan)
Wenn Ihr Spiel auf Vulkan ausgerichtet ist und Android Frame Pacing verwendet, sollte der Android Performance Tuner spät initialisiert werden:
IEnumerator Start()
{
yield return new WaitForEndOfFrame();
ErrorCode startErrorCode = tuner.Start();
Debug.Log("Android Performance Tuner started with code: " + startErrorCode);
tuner.onReceiveUploadLog += request =>
{
Debug.Log("Telemetry uploaded with request name: " + request.name);
};
}
Intervall zwischen Telemetrie-Uploads prüfen
Das Standardintervall zwischen Telemetrie-Uploads in den Plug-in-Einstellungen beträgt 30 Sekunden. Dieser Zeitraum ist auf ein kurzes Intervall festgelegt, um die korrekte Übertragung von Telemetriedaten zu erleichtern. Wenn Sie Ihr Spiel in der Produktion veröffentlichen, sollten Sie ein großes Intervall festlegen (z. B. alle 10 Minuten), damit das Spiel nicht zu viele Anfragen an die APIs sendet. Das ist besonders wichtig für Nutzer, die keinen mobilen Datentarif mit unbegrenztem Datenvolumen haben. Ein großes Intervall verhindert auch eine übermäßige Nutzung des Geräteakkus.
So prüfen Sie, ob das Intervall auf 30 Sekunden festgelegt ist:
- Wählen Sie Google > Android Performance Tuner aus, um auf die Einstellungen zuzugreifen.
- Wählen Sie den Tab Einstellungen für die Instrumentierung aus und klicken Sie auf Erweiterte Einstellungen verwenden.
- Prüfen Sie, ob das Feld Intervalle (Minuten) den Wert 0,5 enthält.
Tab Instrumentation settings (Instrumentierungseinstellungen) im Plug-in
Funktionsweise prüfen
Wenn Sie IL2CPP oder Code Stripping verwenden, lesen Sie den Abschnitt Code Stripping verwalten.
Spiel für Android entwickeln Während Ihr Spiel auf einem Gerät gestartet wird, öffnen Sie ein Terminal auf Ihrem Computer und starten Sie adb logcat
:
adb logcat
Suchen Sie in der Ausgabe von adb logcat
nach „TuningFork“, da dies der interne Name der Bibliothek ist:
02-03 16:55:45.103 10511 10536 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:55:45.103 10511 10536 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.105 10511 10536 I TuningFork: OpenGL version 3.2
02-03 16:55:45.105 10511 10536 I TuningFork: TuningFork.GoogleEndpoint: OK
02-03 16:55:45.106 10511 10611 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.106 10511 10536 I TuningFork: TuningFork Settings:
[...]
02-03 16:55:45.116 10511 10536 I Unity : Tuningfork started with code: Ok
02-03 16:55:45.107 10511 10536 I TuningFork: TuningFork initialized
02-03 16:55:45.107 10511 10536 I UnityTuningfork: Swappy backend: 1
02-03 16:55:45.107 10511 10536 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork/V1
02-03 16:55:45.110 10511 10613 I TuningFork: OpenGL version 3.2
02-03 16:55:45.110 10511 10613 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:generateTuningParameters
Wenn Sie bei der Einrichtung des Plug-ins einen Fehler gemacht haben, z. B. den API-Schlüssel vergessen haben, wird in den Initialisierungsprotokollen ein Fehler angezeigt:
02-03 16:49:44.970 8815 8831 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:49:44.971 8815 8831 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:49:44.972 8815 8831 I TuningFork: OpenGL version 3.2
02-03 16:49:44.972 8815 8831 W TuningFork.GE: The API key in Tuning Fork TFSettings is invalid
02-03 16:49:44.972 8815 8831 E TuningFork: TuningFork.GoogleEndpoint: FAILED
02-03 16:49:44.973 8815 8831 I Unity : Tuningfork started with code: BadParameter
Prüfen Sie, ob der Android Performance Tuner Telemetriedaten hochlädt. Wenn in den Logs TuningFork
initialized
angezeigt wird, warten Sie noch etwas und suchen Sie nach Logs, die darauf hinweisen, dass Telemetriedaten hochgeladen werden.
02-03 16:58:00.552 10511 10611 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:uploadTelemetry
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response code: 200
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response message: OK
02-03 16:58:00.899 10511 10611 I TuningFork.GE: UPLOAD request returned 200 {}
Sie können in den Logs auch nach „Connecting to:“ suchen. Einige Zeilen später folgt der Antwortcode.
Wenn Sie keine Protokolle für den Telemetrie-Upload sehen, prüfen Sie, ob Sie das Intervall zwischen den einzelnen Uploads in den Android Performance Tuner-Einstellungen auf einen kleinen Wert wie 30 Sekunden festgelegt haben.
Code-Stripping verwalten
Google.Protobuf.dll
verwendet die Reflektion. Beim Entfernen von Code wird möglicherweise ein Teil des erforderlichen Codes entfernt. Um dies zu vermeiden, enthält das Plug-in eine Datei link.xml
mit Informationen dazu, welche Symbole beibehalten werden sollen. Wenn Sie eine Funktion von Protobuf benötigen, die Reflection verwendet, und das Entfernen von Code aktiviert ist, fügen Sie diese Informationen in die Datei link.xml
ein, um die Symbole beizubehalten.
Weitere Informationen zum Entfernen von verwaltetem Code finden Sie in der Unity-Dokumentation.
Wenn Sie alle Symbole in Protobuf beibehalten müssen, fügen Sie Ihrem Projekt eine link.xml
-Datei mit folgendem Inhalt hinzu:
<linker>
<assembly fullname="Google.Protobuf" preserve="all"/>
</linker>
Ahead-of-Time-Kompilierung (AOT)
Die Ahead-of-Time-Kompilierung ist für das IL2CPP-Backend und Unity-Versionen 2017 und 2018 erforderlich, aber nicht für spätere Versionen von Unity.
Der AOT-Compiler generiert möglicherweise keinen Code für generische Methoden. Sie müssen den Compiler zwingen, den für Protobuf erforderlichen Code zu generieren, indem Sie die folgende Methode hinzufügen:
using Google.Protobuf.Reflection;
using UnityEngine.Scripting;
...
// Don't call this method.
[Preserve]
void ExampleOfForceReflectionInitializationForProtobuf()
{
FileDescriptor.ForceReflectionInitialization<Scene>();
FileDescriptor.ForceReflectionInitialization<ShadowType>();
FileDescriptor.ForceReflectionInitialization<LevelType>();
...
// Add FileDescriptor.ForceReflectionInitialization<T> for each generated enum.
// You can find the list of enums in DevTuningfork.cs -> enum section
// or in the list of enums in Google -> Android Performance Tuner.
}
Weitere Informationen zu Scripting-Einschränkungen finden Sie in der Unity-Dokumentation.