Panoramica di Android Performance Tuner (Unity)

Questa guida descrive come utilizzare un plug-in Unity per registrare e caricare i dati relativi al tempo di frame da Unity 2017.4 o versioni successive.

Per i motori di gioco che utilizzano C o C++, consulta la guida per i motori di gioco nativi.

Sfondo

Un componente fondamentale dell'esperienza di gioco è il rendimento del rendering. Il rendimento del rendering è il risultato dei seguenti due input:

  • Frequenza fotogrammi: la frequenza con cui viene disegnato un fotogramma.
  • Impostazioni della qualità grafica: livello di fedeltà con cui viene presentato un frame, inclusa la fedeltà della simulazione e della grafica.

Per i giochi, un buon rendimento del rendering è definito come segue:

  • Offrire un frame rate stabile e coerente (ovvero la percentuale di frame renderizzati alla frequenza desiderata).
  • Rendering dei frame alla frequenza più elevata possibile mantenendo la stabilità, in genere 30 o 60 FPS a seconda del tipo di gioco.
  • Massimizzare il livello di dettaglio per un utente in base alle dimensioni e alla densità dello schermo, ottenendo comunque un frame rate stabile e desiderato.

La libreria Android Frame Pacing limita gran parte della variazione dei tempi di frame, fornendo un frame rate stabile per i giochi. La variazione rimanente nei tempi di frame è dovuta al livello di dettaglio visualizzato durante alcune scene del gameplay e alle funzionalità grafiche del dispositivo. Utilizzando Android Performance Tuner, puoi individuare i momenti del gameplay in cui la durata frame è più lenta o più veloce del target e correlare questi problemi e opportunità a:

  • Impostazioni di qualità specifiche
  • Scene specifiche del gioco
  • Modelli di dispositivi o specifiche dei dispositivi specifici

Registrare e caricare i dati

La libreria Tuning Fork si basa sulla chiamata di una delle sue funzioni di tick ogni frame da parte della libreria Android Frame Pacing (o dal motore Unity per le versioni precedenti di Unity in cui la libreria Frame Pacing non è presente). All'interno della libreria, queste informazioni sui tick vengono aggregate in istogrammi che vengono poi caricati periodicamente su Google Play tramite un endpoint HTTP. Ogni segno di spunta viene registrato come associato a una chiave dello strumento e a un'annotazione. Definisci le annotazioni utilizzando il plug-in Unity.

Chiavi di instrumentazione

Una chiave dello strumento indica da dove proviene il segno di spunta nel frame ed è un numero intero che deve essere passato a ogni chiamata di funzione di segno di spunta. Questa operazione viene eseguita automaticamente dal plug-in Unity. Se l'opzione Optimized Frame Pacing è attivata nelle impostazioni di Unity per il tuo gioco (disponibile in Unity versione 2019.3.14 o successive), Android Performance Tuner utilizzerà le informazioni della libreria Android Frame Pacing per generare report con metriche avanzate.

Annotazioni

Le annotazioni forniscono informazioni contestuali su cosa sta facendo il gioco quando viene registrato un tick. Ad esempio, un'annotazione potrebbe identificare uno dei seguenti elementi:

  • Il livello attuale del gioco
  • Caricamento di una scena specifica in corso
  • Sullo schermo è presente un "capo"
  • Qualsiasi altra informazione pertinente sullo stato del gioco

Le annotazioni vengono definite in una finestra di dialogo fornita dal plug-in Unity.

Internamente, la libreria Tuning Fork utilizza il formato del buffer di protocollo di Google per archiviare annotazioni e parametri di fedeltà. Si tratta di un protocollo multilingue ben definito per dati strutturati estensibili. Per saperne di più, consulta la documentazione di Protocol Buffers.

Parametri di fedeltà

I parametri di fedeltà influenzano le prestazioni e la fedeltà grafica del tuo gioco, ad esempio il livello di dettaglio della mesh, la risoluzione delle texture e il metodo di anti-aliasing. Come le annotazioni, i parametri di fedeltà vengono definiti in una finestra di dialogo fornita dal plug-in Unity.

Overhead di memoria e CPU

Tutta la memoria utilizzata dalla libreria Tuning Fork viene allocata all'inizializzazione per evitare sorprese durante il gioco. Le dimensioni dei dati dipendono dal numero di chiavi dello strumento, dal numero di annotazioni possibili e dal numero di bucket in ogni istogramma; sono un multiplo di tutti questi valori moltiplicato per quattro byte per ogni bucket. Esistono anche due copie di tutti gli istogrammi per consentire l'invio in modalità a doppio buffer.

L'invio avviene in un thread separato e non blocca le chiamate di controllo. Se non è disponibile una connessione di caricamento, l'invio viene messo in coda per il caricamento successivo.

La chiamata di una funzione di tick comporta un sovraccarico di elaborazione minimo: calcola semplicemente un indice nella matrice dei bucket dell'istogramma e incrementa un conteggio intero.

Richieste web

La libreria effettua due tipi di richieste all'endpoint del server:

  • Una richiesta generateTuningParameters all'inizializzazione
  • Periodicamente durante il gioco, una richiesta uploadTelemetry per inviare dati al server

Giocatori offline

Se non è disponibile alcuna connessione all'inizializzazione, la richiesta viene ritentata più volte con un tempo di backoff crescente. Se non è presente una connessione al momento del caricamento, quest'ultimo viene memorizzato nella cache. I caricamenti vengono archiviati come file in uno spazio di archiviazione temporaneo.

Requisiti

Per utilizzare il plug-in nel tuo gioco, utilizza una versione supportata di Unity:

  • Unity versione 2017.4 o successive e .NET versione 4.6
  • Per utilizzare i file di espansione APK, è necessario Unity 2018.2
  • Per una migliore spaziatura dei frame e misurazioni della GPU, è necessaria la versione 2019.3.14 o successive di Unity.
  • Per il supporto delle scene Addressables, sono necessari Unity 2019.3 o versioni successive e Addressables package 1.19.4 o versioni successive.

Integrare Android Performance Tuner in Unity

Per informazioni sull'integrazione di Android Performance Tuner in Unity, vedi Attivare l'API.