Optimizaciones Específicas para iOS
Optimizando el tamaño del reproductor iOS integrado

Midiendo el Rendimiento con el Perfilador (Profiler) Integrado

El Unity iOS y Android contiene un perfilador (profiler) integrado. Este es incluido en todas las versiones de los complementos (add-ons), y no es una características Pro. (No obstante, los complemento (add-ons) Pro contienen un perfilador más avanzado) El perfilador integrado emite mensajes de consola del juego que está corriendo en el dispositivo. Esto mensajes son escritos cada 30 segundos y darán una percepción a cómo y el juego está corriendo. Entendiendo lo que estos mensajes significan no es siempre fácil, pero como mínimo, usted debería rápidamente ser capaz de determinar si su juego está ligado a CPU o GPU, y si está ligado a CPU si es código script, o tal vez una colección de basura de Mono que lo está volviendo lento. Vea más adelante de esta página en cómo configurar el perfilador integrado.

Lo que el Perfilador le Dice a Usted

He aquí un ejemplo del output del perfilador integrado.

iPhone/iPad Unity internal profiler stats:
cpu-player> min: 9.8 max: 24.0 avg: 16.3
cpu-ogles-drv> min: 1.8 max: 8.2 avg: 4.3
cpu-waits-gpu> min: 0.8 max: 1.2 avg: 0.9
cpu-present> min: 1.2 max: 3.9 avg: 1.6
frametime> min: 31.9 max: 37.8 avg: 34.1
draw-call #> min: 4 max: 9 avg: 6 | batched: 10
tris #> min: 3590 max: 4561 avg: 3871 | batched: 3572
verts #> min: 1940 max: 2487 avg: 2104 | batched: 1900
player-detail> physx: 1.2 animation: 1.2 culling: 0.5 skinning: 0.0 batching: 0.2 render: 12.0 fixed-update-count: 1 .. 2
mono-scripts> update: 0.5 fixedUpdate: 0.0 coroutines: 0.0 
mono-memory> used heap: 233472 allocated heap: 548864 max number of collections: 1 collection total duration: 5.7

Todos los tiempos son medidos en mili-segundos por cuadro (frame). Usted puede ver el tiempo mínimo, máximo y promedio en los últimos treinta cuadros (frames).

Actividad General de CPU

cpu-player Muestra el tiempo que su juego gasta ejecutando código dentro del motor de Unity y ejecutando scripts en el CPU.
cpu-ogles-drv Muestra el tiempo que gasta ejecutando código del controlador OpenGL ES en el CPU. Mucho factores como el número de llamadas de dibujo, número de cambios de estado internos de renderizado, la configuración del pipeline de renderizado e incluso el número de vértices procesados pueden tener efecto en las estadísticas del controlador.
cpu-waits-gpu Muestra el tiempo que el CPU está sin actividad mientras espera por el GPU en finalizar el renderizado. Si este número excede los 2–3 mili-segundos entonces su aplicación está ligada a un procesamiento de fillrate/GPU. Si este valor es muy pequeño, entonces el perfilador salta mostrar el valor.
msaa-resolve El tiempo que toma en aplicar anti-aliasiing.
cpu-present La cantidad de tiempo que se gasta ejecutando el comando presentRenderbuffer en OpenGL ES.
frametime Representa el tiempo en general de un cuadro (frame) de juego. Tenga en cuenta que el hardware de iOS siempre está bloqueado en una tasa de 60Hz de actualización, entonces usted siempre obtendrá tiempos de 16.7ms (1000ms/60Hz = 16.7ms).

Estadísticas de Renderización

tris # El número Total de triángulos enviados para renderización.
verts # El número total de vértices enviados para renderización. Usted debería mantener este número debajo de 10000 si usted solo utiliza geometría estática, pero si usted tiene mucha geometría skinned entonces usted debería mantenerlo lo más bajo posible.
batched El número de llamadas de dibujo, triángulos y vértices que fueron automáticamente batched por el motor. Comparando estos números con llamadas de dibujo y los totales de triángulos le dará una idea de qué tan bien está su escena para batching. Comparta tantos materiales como sea posible a lo largo de sus objetos para mejorar el batching.

Estadísticas Detallas del Reproductor de Unity

La sección player-detail proporciona una ruptura detallada de qué es lo que pasa dentro del motor:-

physx El tiempo gastado en física.
animation El tiempo gastado animando huesos.
culling El tiempo gastado omitiendo (culling) objetos afuera del troncocónico de la cámara.
skinning El tiempo gastado aplicando animaciones a skinned meshes.
batching El tiempo gastado batching geometría. Batching geometría dinámica es considerable más cara que batching geometría estática.
render El tiempo gastado renderizando objetos visibles.
fixed-update-count El número mínimo y máximo de FixedUpdates ejecutados durante este cuadro (frame). Muchos FixedUpdates van a deteriorar el rendimiento considerablemente.

Estadísticas Detalladas de Scripts

La sección de mono-scripts proporciona una ruptura detallada del tiempo gastado ejecutando código en el tiempo de ejecución de Mono:

update El tiempo total gastado ejecutando todas las funciones Update() en scripts.
fixedUpdate El tiempo total gastado ejecutando todas las funciones FixedUpdate() en scripts.
coroutines El tiempo total gastado dentro de corrutinas de scripts.

Estadísticas Detalladas de La Memoria Asignada por Scripts

La sección mono-memory le da a usted una idea de cómo la memoria está siendo manejada por el recolector de basura de Mono:

allocated heap La cantidad de memoria total disponible para asignaciones. Un recolector de basura será activado si no hay suficiente memoria disponible en el heap de una asignación dada. Si todavía no hay memoria disponible suficiente incluso después de que se haya recolectado basura entonces el heap asignado aumentará en tamaño.
used heap La porción del allocated heap que actualmente está siendo utilizado por los objetos. Cada vez que usted crea una nueva instancia de clase (no struct) este número va a crecer hasta que venga el recolector de basura nuevamente.
max number of collections Número de pases de recolección de basura durante los últimos 30 frames.
collection total duration Tiempo total (en Milisegundos) de todos los pases de recolección de basura que han ocurrido durante los últimos 30 frames.

Configuración

En iOS, está deshabilitado por defecto. Para habilitarlo, abra el proyecto XCode generado por Unity, seleccione el archivo InternalProfiler.h y cambie la línea

 #define ENABLE_INTERNAL_PROFILER 0

para

 #define ENABLE_INTERNAL_PROFILER 1

Seleccione View > Debug Area > Activate Console en el menú de XCode para mostrar la consola de output (GDB) y luego corra su proyecto. Unity va a output estadísticas a la ventana de la consola cada treinta cuadros (frames).

Para habilitarlo en Android, haga clic en la casilla de verificación Enable Internal Profiler en PlayerSettings (Edit > Project Settings > Player). Asegúrese de que Development Build esté marcado en __ Build Settings__ cuando se compile y que las estadísticas aparezcan en logcat cuando se ejecuten en el dispositivo. Para ver Logcat, necesita adb o el Android Debug Bridge. Una vez que tenga eso, simplemente ejecute el comando de shell adb logcat.

Optimizaciones Específicas para iOS
Optimizando el tamaño del reproductor iOS integrado