¿Qué estás buscando?
Games

Optimice el rendimiento de sus juegos móviles: Obtenga consejos de expertos sobre física, interfaz de usuario y configuración de audio.

THOMAS KROGH-JACOBSEN / UNITY TECHNOLOGIESProduct Marketing Core Tech
Jul 13, 2021|13 minutos
Optimice el rendimiento de sus juegos móviles: Obtenga consejos de expertos sobre física, interfaz de usuario y configuración de audio.
Para tu comodidad, tradujimos esta página mediante traducción automática. No podemos garantizar la precisión ni la confiabilidad del contenido traducido. Si tienes alguna duda sobre la precisión del contenido traducido, consulta la versión oficial en inglés de la página web.

Nuestro equipo de Éxito Integrado apoya a los clientes de Unity con sus problemas técnicos complejos. Nos sentamos con este equipo de ingenieros de software senior y les pedimos que compartieran parte de su experiencia en optimización de juegos móviles.

Nuestro equipo de Accelerate Solutions conoce el código fuente al dedillo y trabaja con una gran cantidad de clientes de Unity para ayudarlos a aprovechar el motor al máximo. En su trabajo, profundizan en los proyectos de los creadores para ayudar a identificar puntos en los que se podría optimizar el rendimiento para lograr una mayor velocidad, estabilidad y eficiencia.

A medida que nuestros ingenieros comenzaron a compartir sus conocimientos sobre la optimización de juegos móviles, rápidamente nos dimos cuenta de que había demasiada información excelente para la única publicación del blog que habíamos planeado. En lugar de eso, decidimos convertir su montaña de conocimientos en un libro electrónico completo (que puede descargar aquí), así como en una serie de publicaciones de blog que destacan algunos de estos más de 75 consejos prácticos.

En esta segunda entrega de esta serie, nos centraremos en cómo mejorar el rendimiento con la interfaz de usuario, la física y la configuración de audio. En caso de que te lo hayas perdido, consulta nuestra publicación anterior sobre creación de perfiles, memoria y arquitectura de código, y estate atento a la próxima, dedicada a activos, configuración de proyectos y gráficos.

¿Lo quieres todo ahora? Descargue el libro electrónicogratuito .

¡Vamos directo al grano!

Física

La física integrada de Unity (Nvidia PhysX) puede ser costosa en dispositivos móviles, pero los siguientes consejos pueden ayudarte a obtener más cuadros por segundo.

Optimice su configuración

En PlayerSettings, marque Prebake Collision Meshes siempre que sea posible.

Imagen del cuadro de configuración del jugador con un fondo gris oscuro y el texto "prebake clash meshes*" marcado y resaltado en rojo
Habilitar mallas de colisión prehorneadas.

Asegúrese de editar su configuración de Física (Configuración del proyecto > Física) y simplificar su Matriz de colisión de capas siempre que sea posible.

Deshabilite las transformaciones de sincronización automática y habilite la reutilización de devoluciones de llamadas de colisión.

Imagen del cuadro de configuración del proyecto con un fondo gris y las secciones "Transformaciones de sincronización automática" y "Matriz de colisión de capas" resaltadas en rojo.
Modifique la configuración del proyecto de física para aumentar el rendimiento.
Imagen del módulo de física del perfilador con la sección de 5 ms que muestra actividad en verde, azul y naranja sobre un fondo negro.
Esté atento al módulo de Física del Profiler para detectar problemas de rendimiento.
Simplificar los colisionadores

Los colisionadores de malla pueden ser costosos. Sustituya los colisionadores de malla más complejos por colisionadores de malla primitivos o simplificados para aproximarse a la forma original.

Utilice primitivas o mallas simplificadas para los colisionadores.
Utilice primitivas o mallas simplificadas para los colisionadores.
Mover un cuerpo rígido usando métodos físicos

Utilice métodos de clase como MovePosition o AddForce para mover sus objetos Rigidbody . Traducir directamente sus componentes de transformación puede dar lugar a nuevos cálculos del mundo físico, que son costosos en escenas complejas. Mover cuerpos físicos en FixedUpdate en lugar de Update.

Arreglar el paso de tiempo fijo

El paso de tiempo fijo predeterminado en la configuración del proyecto es 0,02 (50 Hz). Cambie esto para que coincida con su velocidad de cuadros objetivo (por ejemplo, 0,03 para 30 fps).

Sin embargo, si la velocidad de cuadros disminuye durante el tiempo de ejecución, esto significa que Unity llamaría a FixedUpdate varias veces por cuadro y potencialmente crearía un problema de rendimiento de la CPU con contenido con mucha física.

El paso de tiempo máximo permitido limita la cantidad de tiempo que los cálculos físicos y los eventos FixedUpdate pueden usar en caso de que la velocidad de cuadros disminuya. Reducir este valor significa que durante una falla en el rendimiento, la física y la animación podrían ralentizarse, al tiempo que se reduce su impacto en la velocidad de cuadros.

Imagen del módulo de tiempo fijo dentro de la configuración del proyecto con fondo gris y texto blanco.
Modifique el paso de tiempo fijo para que coincida con la velocidad de cuadros objetivo y reduzca el paso de tiempo máximo permitido para reducir fallas de rendimiento.
Visualizar con el depurador de física

Utilice la ventana Depuración de física (Ventana > Análisis > Depurador de física) para ayudar a solucionar cualquier problema de colisionadores o discrepancias. Esto muestra un indicador codificado por colores de los GameObjects que pueden colisionar entre sí.

Imagen de un barco naranja con una superposición de malla y una sombra azul dentro del cuadro de diálogo del depurador de física.
La herramienta de depuración de física le ayuda a visualizar cómo sus objetos físicos pueden interactuar entre sí.

Para obtener más información, consulte Visualización de depuración de física en la documentación de Unity .

Interfaz de usuario

La Unity UI (UGUI) a menudo puede ser una fuente de problemas de rendimiento. El componente Canvas genera y actualiza mallas para los elementos de la interfaz de usuario y emite llamadas de dibujo a la GPU. Su funcionamiento puede resultar costoso, así que tenga en cuenta los siguientes factores al trabajar con UGUI.

Divide tus lienzos

Si tiene un Canvas grande con miles de elementos, actualizar un solo elemento de la interfaz de usuario obliga a que todo el Canvas se actualice, lo que potencialmente puede generar un pico de CPU.

Aproveche la capacidad de UGUI para admitir múltiples Canvas. Divida los elementos de la interfaz de usuario según la frecuencia con la que necesitan actualizarse. Mantenga los elementos de la interfaz de usuario estáticos en un lienzo separado y los elementos dinámicos que se actualizan al mismo tiempo en sublienzos más pequeños.

Asegúrese de que todos los elementos de la interfaz de usuario dentro de cada lienzo tengan el mismo valor Z, materiales y texturas.

Ocultar elementos invisibles de la interfaz de usuario

Es posible que tengas elementos de interfaz de usuario que solo aparezcan esporádicamente en el juego (por ejemplo, una barra de salud que aparece cuando un personaje recibe daño). Si su elemento UI invisible está activo, es posible que aún esté usando llamadas de dibujo. Deshabilite explícitamente cualquier componente de interfaz de usuario invisible y vuelva a habilitarlo según sea necesario.

Si solo necesita desactivar la visibilidad del Canvas, deshabilite el componente Canvas en lugar de GameObject. Esto puede ahorrar la reconstrucción de mallas y vértices.

Limitar GraphicRaycasters y deshabilitar Raycast Target

Los eventos de entrada, como toques o clics en pantalla, requieren el componente GraphicRaycaster . Esto simplemente recorre cada punto de entrada en la pantalla y verifica si está dentro de RectTransform de una interfaz de usuario.

Eliminar el GraphicRaycaster predeterminado del lienzo superior en la jerarquía. En su lugar, agregue GraphicRaycaster exclusivamente a los elementos individuales que necesitan interactuar (botones, barras de desplazamiento, etc.).

Imagen del cuadro de diálogo del emisor de rayos gráfico gris con texto blanco.
Desactive la opción Ignorar gráficos invertidos, que está activa de forma predeterminada.

Además, deshabilite Raycast Target en todos los textos e imágenes de la interfaz de usuario que no lo necesiten. Si la interfaz de usuario es compleja con muchos elementos, todos estos pequeños cambios pueden reducir los cálculos innecesarios.

Cuadro de diálogo de imagen con un fondo gris y el texto "Raycast Target" delineado en un cuadrado rojo.
Deshabilite Raycast Target si es posible.
Evite los grupos de diseño

Los grupos de diseño se actualizan de manera ineficiente, por lo que conviene utilizarlos con moderación. Evítelos por completo si su contenido no es dinámico y utilice anclas para diseños proporcionales. De lo contrario, cree un código personalizado para deshabilitar los componentes del grupo de diseño después de configurar la interfaz de usuario.

Si necesita utilizar grupos de diseño (Horizontal, Vertical, Cuadrícula) para sus elementos dinámicos, evite anidarlos para mejorar el rendimiento.

Cuadro de diálogo del grupo de diseño de cuadrícula con fondo gris y texto blanco.
Los grupos de diseño pueden reducir el rendimiento, especialmente cuando están anidados.
Evite las vistas de listas y cuadrículas de gran tamaño

Las vistas de listas y cuadrículas grandes son costosas. Si necesita crear una vista de lista o cuadrícula grande (por ejemplo, una pantalla de inventario con cientos de elementos), considere reutilizar un grupo más pequeño de elementos de IU en lugar de crear un elemento de IU para cada elemento. Consulte este proyecto de muestra de GitHub para ver esto en acción.

Evite numerosos elementos superpuestos

La superposición de muchos elementos de la interfaz de usuario (por ejemplo, cartas apiladas en un juego de batalla de cartas) crea un sobregiro. Personalice su código para fusionar elementos en capas en tiempo de ejecución en menos elementos y lotes.

Utilice múltiples resoluciones y relaciones de aspecto

Dado que ahora los dispositivos móviles utilizan resoluciones y tamaños de pantalla muy diferentes, es necesario crear versiones alternativas de la interfaz de usuario para brindar la mejor experiencia en cada dispositivo.

Utilice el Simulador de dispositivo para obtener una vista previa de la interfaz de usuario en una amplia gama de dispositivos compatibles. También puedes crear dispositivos virtuales en XCode y Android Studio.

Imagen del simulador de dispositivo que tiene un fondo de cuadro de diálogo gris y una simulación de un juego de carreras de barcos en un teléfono inteligente.
Obtenga una vista previa de una variedad de formatos de pantalla utilizando el Simulador de dispositivo.
Al utilizar una interfaz de usuario de pantalla completa, oculte todo lo demás

Si la pantalla de pausa o inicio cubre todo lo demás en la escena, desactive la cámara que está renderizando la escena 3D . Del mismo modo, deshabilite cualquier elemento de fondo del Canvas que esté oculto detrás del Canvas superior.

Considere reducir Application.targetFrameRate durante una interfaz de usuario de pantalla completa, ya que no debería necesitar actualizar a 60 fps.

Asignar la cámara a los lienzos del espacio mundial y del espacio de la cámara

Dejar el campo Evento o Cámara de renderizado en blanco obliga a Unity a completar Camera.main, lo que resulta innecesariamente costoso.

Si es posible, considere usar Screen Space – Overlay para su Canvas RenderMode , ya que eso no requiere una cámara.

Imagen del cuadro de diálogo Lienzos espaciales de la cámara con un fondo gris y texto blanco.
Al utilizar el modo de renderizado de espacio mundial, asegúrese de completar la cámara de eventos.
Sonido

Aunque el audio normalmente no es un cuello de botella en el rendimiento, aún puedes optimizarlo para ahorrar memoria.

Cuadro de diálogo del inspector con fondo gris y texto blanco con un modulador de voz naranja en la parte inferior.
Optimice la configuración de importación de sus clips de audio.
Utilice archivos WAV originales sin comprimir como recursos de origen cuando sea posible

Si utiliza algún formato comprimido (como MP3 o Vorbis), Unity lo descomprimirá y luego lo volverá a comprimir durante el tiempo de compilación. Esto da como resultado dos pasadas con pérdida, lo que degrada la calidad final.

Comprime el clip y reduce la tasa de bits de compresión

Reduce el tamaño de tus clips y el uso de memoria con la compresión:

  • Utilice Vorbis para la mayoría de los sonidos (o MP3 para sonidos que no están destinados a reproducirse en bucle).
  • Utilice ADPCM para sonidos cortos y utilizados con frecuencia (por ejemplo, pasos, disparos). Esto reduce los archivos en comparación con el PCM sin comprimir, pero es rápido de decodificar durante la reproducción.

Los efectos de sonido en dispositivos móviles deben ser de 22.050 Hz como máximo. El uso de configuraciones más bajas generalmente tiene un impacto mínimo en la calidad final; use sus propios oídos para juzgar.

Elija el tipo de carga adecuado

La configuración varía según el tamaño del clip.

  • Los clips pequeños (< 200 kb) deben Descomprimir al cargar. Esto genera un costo de CPU y memoria al descomprimir un sonido en datos de audio PCM de 16 bits, por lo que solo es deseable para sonidos cortos.
  • Los clips medianos (>= 200 kb) deben permanecer comprimidos en la memoria.
  • Los archivos grandes (música de fondo) deben configurarse en Transmisión; de lo contrario, todo el activo se cargará en la memoria a la vez.
Descargar fuentes de audio silenciadas de la memoria

Al implementar un botón de silencio, no establezca simplemente el volumen en 0. Puede destruir el componente AudioSource para descargarlo de la memoria, siempre que el reproductor no necesite activarlo y desactivarlo muy a menudo.

Descargue los consejos completos sobre el rendimiento móvil

En la próxima publicación del blog, profundizaremos directamente en los gráficos y los activos. Pero si desea acceder a la lista completa de consejos y trucos del equipo actual, nuestro libro electrónico completo está disponible aquí.

Imagen de la portada del libro electrónico con fondo rojo y un gráfico de un juego de aventuras con un dragón y las palabras "Optimiza el rendimiento de tu juego móvil" en texto blanco en negrita.

DESCARGAR LIBRO ELECTRÓNICO

Si está interesado en obtener más información sobre los servicios de soporte integrado y desea brindarle a su equipo acceso directo a ingenieros, asesoramiento de expertos y orientación sobre las mejores prácticas para sus proyectos, consulte los planes de éxito de Unity aquí.

Mantente atento para obtener más consejos de rendimiento.

Queremos ayudarte a que tus aplicaciones Unity tengan el mayor rendimiento posible, así que si hay algún tema de optimización sobre el que te gustaría saber más, mantennos informado en los comentarios.