En esta guía, se describe cómo usar un complemento de Unity a fin de registrar y subir datos de latencia de fotogramas de Unity 2017.4 o una versión posterior.
Para los motores de juegos que usan C o C++, consulta la guía para motores de juegos nativos.
Información general
Un componente fundamental de la experiencia de juego es el rendimiento del renderizado. Este rendimiento es el resultado de las siguientes dos entradas:
- Velocidad de fotogramas: frecuencia con la que se traza un fotograma
- Configuración de calidad gráfica: grado de fidelidad al que se presenta un fotograma, lo que incluye tanto la fidelidad de simulación como los gráficos
En materia de juegos, un buen rendimiento de renderizado se define como aquel que logra lo siguiente:
- Entregar una velocidad de fotogramas estable y coherente (es decir, el porcentaje de fotogramas que se renderizan a la frecuencia deseada)
- Renderizar fotogramas con la mayor frecuencia posible y, al mismo tiempo, mantener la estabilidad (por lo general, será de 30 o 60 FPS, según el tipo de juego)
- Maximizar el nivel de detalle para cada usuario según el tamaño y la densidad de su pantalla, y lograr una velocidad de fotogramas estable y deseable
La biblioteca de Android Frame Pacing limita gran parte de la variación de la latencia de fotogramas, lo que proporciona una velocidad de fotogramas estable para los juegos. La variación restante se debe al nivel de detalle que se muestra durante ciertas escenas del juego y a las capacidades gráficas del dispositivo. Con Android Performance Tuner, puedes identificar los momentos del juego en los que la latencia de fotogramas fue más lenta o más rápida que el objetivo y correlacionar estos problemas y oportunidades con lo siguiente:
- Determinada configuración de calidad
- Escenas del juego específicas
- Modelos o especificaciones de dispositivos
Cómo registrar y subir datos
La biblioteca de Tuning Fork depende de que la biblioteca Android Frame Pacing llame a una de las funciones de marca (o que lo haga el motor de Unity en versiones anteriores de Unity, en las que la biblioteca Frame Pacing no está disponible). En la biblioteca, se agrega esta información de marca a histogramas, que luego se suben periódicamente a Google Play a través de un extremo HTTP. Cada marca se registra como asociada con una etiqueta de marca y una anotación. Las anotaciones se definen por medio del complemento de Unity.
Etiquetas de marca
Una etiqueta de marca indica el lugar del fotograma del cual proviene la marca y es un valor entero que se debe pasar a cada llamada a función de marca. Esto se hace automáticamente mediante el complemento de Unity. Si está habilitada la opción Optimized Frame Pacing en la configuración de Unity para tu juego (disponible en Unity 2019.3.14 o versiones posteriores), Android Performance Tuner usará la información de la biblioteca de Android Frame Pacing a fin de informar métricas mejoradas.
Anotaciones
Las anotaciones proporcionan información contextual sobre lo que está haciendo tu juego cuando se registra una marca. Por ejemplo, una anotación podría identificar cualquiera de los siguientes elementos:
- El nivel actual del juego
- La carga en curso de una escena específica
- La presencia en pantalla de un "jefe"
- Cualquier otra información relevante sobre el estado del juego
Las anotaciones se definen en un cuadro de diálogo proporcionado por el complemento de Unity.
De forma interna, la biblioteca de Tuning Fork usa el formato del búfer de protocolo de Google para almacenar anotaciones y parámetros de fidelidad. Este es un protocolo bien definido, que admite varios idiomas y que se aplica a los datos estructurados extensibles. Para obtener más información, consulta la documentación sobre búferes de protocolo.
Parámetros de fidelidad
Los parámetros de fidelidad influyen en el rendimiento y el realismo de los gráficos de tu juego, como el nivel de detalle de la malla, la resolución de la textura y el método de suavizado del contorno. Al igual que las anotaciones, los parámetros de fidelidad se definen en un cuadro de diálogo proporcionado por el complemento de Unity.
Sobrecarga de memoria y CPU
Toda la memoria que usa la biblioteca de Tuning Fork se asigna durante la inicialización a fin de evitar sorpresas durante el juego. El tamaño de los datos depende de la cantidad de etiquetas de marca, de anotaciones posibles y de buckets de cada histograma. Es un múltiplo de estas cantidades por cuatro bytes para cada bucket. También hay dos copias de todos los histogramas para permitir el envío en un modo de doble búfer.
El envío se produce en un subproceso independiente y no bloquea las llamadas de marcas. Si no hay una conexión de carga disponible, el envío quedará en una fila para realizar la carga en otro momento.
Hay poca sobrecarga de procesamiento en la llamada a una función de marca: simplemente calcula un índice en el array de los buckets de histogramas y aumenta el recuento de números enteros.
Solicitudes web
La biblioteca realiza dos tipos de solicitudes al extremo del servidor:
- Una solicitud
generateTuningParameters
en la inicialización - Periódicamente durante el juego, una solicitud
uploadTelemetry
para enviar datos al servidor
Jugadores sin conexión
Si no hay una conexión disponible en la inicialización, se volverá a realizar la solicitud varias veces con un tiempo de espera creciente. Si no hay conexión durante la carga, esta se almacenará en caché. Las cargas se almacenan como archivos en el almacenamiento temporal.
Requisitos
Si quieres usar el complemento en tu juego, usa una versión compatible de Unity:
- Unity versión 2017.4 o posterior y .NET versión 4.6
- Para usar archivos de expansión de APK, se requiere Unity 2018.2
- Para mejorar el ritmo de fotogramas y las mediciones de la GPU, se requiere Unity versión 2019.3.14 o posterior
- En el caso de la compatibilidad con las escenas Addressable, se requieren Unity 2019.3 o una versión posterior y un paquete 1.19.4 de Addressable o posterior.
Cómo integrar Android Performance Tuner en Unity
Para obtener información sobre la integración de Android Performance Tuner en Unity, consulta Cómo habilitar la API.