Unity iOS and Android contain a built-in profiler. The built-in profiler emits console messages from the game running on device. These messages are written every 30 seconds and will provide insight into how the game is running. Understanding what these messages mean is not always easy, but as a minimum, you should quickly be able to determine if your game is CPU or GPU bound, and if CPU bound whether it’s script code, or perhaps Mono garbage collection that is slowing you down. See later in this page to learn how to configure the built-in profiler.
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).
Property: | Function: |
---|---|
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 | The time taken to apply anti-aliasing. |
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). |
Property: | Function: |
---|---|
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. |
The player-detail section provides a detailed breakdown of what is happening inside the engine:
Property: | Function: |
---|---|
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:
Property: | Function: |
---|---|
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:
Property: | Function: |
---|---|
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).
To enable it on Android, click the Enable Internal Profiler (Deprecated) checkbox in the Player window (Edit > Project Settings, then select the Player category). Make sure Development Build is checked in the Build Settings when building, and the statistics should show up in logcat when run on the device. To view logcat, you need adb or the Android Debug Bridge. Once you have that, simply run the shell command adb logcat.