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.
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).
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). |
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. |
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. |
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. |
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. |
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.