¿Qué estás buscando?
Hero background image

Optimiza el rendimiento de tus juegos 2D con Unity Tilemap

Obtén consejos para mejorar el rendimiento de tus juegos 2D y aplicaciones móviles con Unity Tilemap. Los temas cubiertos aquí incluyen tamaño de escena, serialización, sobrecarga de renderizador y procesamiento por lotes.
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.

Estos consejos son más útiles para usuarios que tienen algo de experiencia previa con el conjunto de herramientas 2D de Unity. Otro gran recurso para creadores profesionales que desarrollan juegos 2D comerciales con Unity es nuestro libro electrónico, arte de juegos 2D, iluminación y animación.

Si eres nuevo en el desarrollo de juegos 2D con Unity, comienza con la guía 2D para nuevos usuarios.

Captura de pantalla del editor de Unity
UNA IMAGEN DEL PROYECTO 2D DE UNITY, LOST CRYPT

Consejos generales de rendimiento

Aquí hay algunos consejos generales de rendimiento a considerar:

  • Piensa en el rendimiento de tus activos (los datos) desde el principio. Si estos elementos no son eficientes, hay poco que puedas hacer más adelante para optimizar tu código.
  • Perfila en tu dispositivo objetivo de gama más baja disponible. Utiliza el Unity Profiler a lo largo del desarrollo de tu proyecto, junto con herramientas de perfilado específicas de la plataforma, como Xcode para dispositivos iOS.
  • No uses más de un tercio de la RAM disponible en tu dispositivo objetivo de gama más baja. Esto asegura que tu contenido funcionará bien en una amplia gama de dispositivos móviles (los teléfonos Android económicos siguen siendo los más populares en los mercados móviles).

Para más consejos de optimización 2D, consulta estos recursos:

Unity: crea niveles 2D rápidamente con Tilemap
EJEMPLO DE TILEMAP

Una breve introducción a Tilemap

El componente Tilemap te permite crear niveles 2D de manera eficiente utilizando baldosas en una superposición de cuadrícula. Se compone de varios elementos, incluyendo:

Puedes crear niveles 2D utilizando una combinación de Sprites y GameObjects, y controlar propiedades como Capas de Ordenación, Colisionadores de Tilemap y Azulejos Animados, entre otros. También puedes pintar Sprites Cuadrados, Hexagonales y Isométricos.

Pinta tus niveles con Tilemap, de modo que el componente Colisionador 2D de Tilemap generará automáticamente un Colisionador alrededor de los Azulejos (basado en la configuración del Tipo de Colisionador del Azulejo), cuando se aplique a un GameObject de Tilemap.

Veamos las ganancias de rendimiento que obtienes con Tilemap en comparación con escenas construidas con Sprites.

Tilemap con menos objetos
TILEMAP EN LA DEMO 2D DE UNITY DRAGON CRASHERS

Menos GameObjects

Usar Tilemap reduce los tiempos de carga, así como el uso de memoria y CPU.

Si has desarrollado juegos y aplicaciones 2D antes, entonces sabes que puedes terminar con un alto número de Sprites en tu juego, todos ellos como GameObjects separados. Hay componentes en cada uno de esos GameObjects de Sprite, incluyendo un Transform y un Renderer, que ocupan memoria. Otros componentes, como los Colisionadores, vienen con sobrecarga de CPU.

En comparación, un Tilemap utiliza un Renderer para todo el mapa y todos sus azulejos. Esto resulta en menos sobrecarga porque solo maneja sus propias estructuras de datos, en comparación con tener múltiples estructuras de datos en la memoria.

Tener menos GameObjects resulta en una jerarquía más limpia, lo que significa que no tendrás que desplazarte a través de una lista compleja tratando de encontrar lo que necesitas.

Unity: menor tamaño de las escenas con Tilemap
UNA COMPARACIÓN DE DOS ARCHIVOS SERIALIZADOS, UNO CREADO UTILIZANDO SPRITES (IZQUIERDA) Y EL OTRO UTILIZANDO TILEMAPS (DERECHA)

Menor tamaño de escena

Unity Tilemap reduce el tamaño de la escena. Tener menos GameObjects y componentes significa menos objetos que cargar desde el disco, deserializar y mantener en memoria en tiempo de ejecución.

Cargar escenas en Unity es un proceso de dos partes: Primero, los datos se leen desde el disco. Este es el proceso que a menudo toma más tiempo en tu juego, especialmente en dispositivos Android. Luego, los datos se deserializan. La deserialización es el proceso de transformar datos de un formato a otro. Esencialmente, restaura datos y objetos de un estado guardado. Unity realiza la serialización internamente para que cada vez que carga un archivo de escena en el Editor y en tiempo de ejecución, toma esos archivos guardados y los convierte en objetos de Unity.

En la imagen anterior, puedes ver una comparación entre dos archivos de escena serializados, uno que utiliza Tilemaps y otro que se recrea usando Sprites. Gracias a Pixel Reign por esta escena de su juego Robbie Swifthand.

A la derecha hay una sección de un Tilemap serializado, compuesto por cuatro baldosas. Las reglas para todas las baldosas, incluyendo el tipo de baldosas utilizadas, se establecen en la parte superior del Tilemap. Cada una de las baldosas siguientes indica propiedades como la baldosa utilizada y su posición.

A la izquierda hay un Sprite, con componentes de Transform y Sprite Renderer.

Es evidente a partir de esta comparación cuánto trabajo tiene que hacer la serialización de Sprites. En particular, la escena que utiliza Sprites tiene 370,000 líneas en su archivo, mientras que la escena con Tilemaps tiene 30,000 líneas. Tamaños de proyecto y repositorios más pequeños resultan en tiempos de iteración más rápidos y flujos de trabajo más suaves.

Si quieres ver tus propias escenas como un archivo de texto, ve a tu configuración del Editor, activa modo de serialización de assets, haz clic en Forzar texto y abre el archivo de escena .unity en Editor de texto.

Unity: menos colliders con Tilemap
COLLIDER DE TILEMAP 2D COMBINADO CON COLLIDER COMPUESTO 2D

Menos Colliders

Puedes combinar el Collider de Tilemap 2D con el Collider Compuesto. No solo esto reducirá el número de Colliders y Sprites, sino que también traerá más eficiencia a tu producción porque no hay necesidad de reconstruir formas de colisión complejas cada vez que haces un cambio. El Collider Compuesto se encarga de eso.

Casos de uso de Tilemaps
UN CASO DE USO PARA ELEMENTOS INDIVIDUALES DE GAMEOBJECTS CON SU SPRITE RENDERER Y UN TILEMAP

Reducción de la sobrecarga de renderizado

Como se mencionó anteriormente, cada Sprite tiene un componente Sprite Renderer, y tener más renderizadores requiere más trabajo de la CPU, incluyendo tiempo para la preparación de culling y limpieza para el renderizado. Al usar Tilemaps, tendrás menos componentes Renderer, ahorrando así trabajo a las CPUs.

Reducción del costo de culling

Más de una cámara en tu escena significa más renderizadores. Esto aumenta el costo de culling.

En la vista de la cámara, hay un costo por renderizador y por cámara para el culling. Cada cámara tiene que realizar verificaciones de culling en cada componente Renderer en la escena, por lo que si tienes una configuración de múltiples cámaras para tu juego, usar Tilemaps te ayudará a reducir ese costo.

menos llamadas por lotes
EL FRAME DEBUGGER

Menos llamadas por lotes

El Batching consiste en reunir toda la geometría que se puede dibujar, sin hacer otra llamada a SetPass. El Tilemap Renderer agrupa la geometría de los Sprites según su posición. El resultado es que el Tilemap Renderer envía menos mallas con más geometría al pipeline de renderizado, en comparación con el Sprite Renderer que envía más mallas con menos geometría. Como muestra la tabla en la siguiente sección, la escena basada en Tilemap tiene significativamente menos lotes.

Puedes verificar el batching mirando el panel de estadísticas en tu vista de Juego. También puedes usar el Frame Debugger para determinar por qué los elementos no se están agrupando.

Escenas en las que se usan una tabla de tilemaps y sprites

Una tasa de fotogramas más rápida

Para alcanzar 60 fps, cada cuadro puede tardar un máximo de 16 ms en renderizar. Cuando se perfiló la escena de muestra en un viejo iPhone 7, la versión basada en Sprite tenía 244 ms por cuadro, mientras que la versión de Tilemap tenía 13 ms por cuadro.

Finalmente, el uso de RAM fue de 1.1 GB con la escena basada en Sprite, lo cual es demasiado para teléfonos Android de gama baja, por ejemplo. La escena basada en Tilemap solo utilizó 21 MB de RAM, lo que la hace adecuada para ejecutarse en una gama más amplia de dispositivos móviles.

La comparación anterior muestra la clara diferencia en rendimiento entre las dos escenas.

Sprite Atlas demo
USANDO SPRITE ATLAS EN DRAGON CRASHERS

Empaqueta Sprites con Sprite Atlas

Sprite Atlas es la herramienta del Editor que te permite empaquetar tus Sprites en texturas para optimizar el uso de memoria y las llamadas de dibujo. Crea un activo de Sprite Atlas que incluya todos los sprites utilizados en tu Tilemap para que puedan ser agrupados por el Renderizador de Tilemap en una sola llamada de dibujo (siempre que todos los Sprites quepan en una sola textura).

Más recursos para creadores de juegos 2D

Perfecciona tus habilidades 2D: Nuestra lista de lectura del blog proporciona consejos útiles para el desarrollo de juegos 2D.

Arte, animación e iluminación de juegos 2D para artistas: Este libro electrónico gratuito proporciona las mejores prácticas para aprovechar al máximo el conjunto de herramientas 2D de Unity.

Resumen de herramientas 2D: Consulta nuestro práctico resumen de lo que Unity tiene para ofrecer a los desarrolladores 2D.

Patrones procedurales con Tilemaps – Parte I y Parte II: Agrega diversidad a tu juego con generación procedural. Estas publicaciones explican algunos de los algoritmos que puedes usar con Tilemap y RuleTile.

Optimiza el rendimiento de tus juegos 2D con Unity Tilemap