¿Qué estás buscando?
Hero background image

Optimiza el rendimiento de tus juegos 2D con Unity Tilemap

Obtenga consejos para mejorar el rendimiento de sus juegos 2D y aplicaciones móviles con Unity Tilemap. Los temas que se tratan aquí incluyen el tamaño de la escena, la serialización, la sobrecarga del renderizador y el procesamiento por lotes.

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

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

Capturas 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 funcionan, es poco lo que puede hacer más adelante para optimizar su código.
  • Perfil en su dispositivo de destino de gama más baja disponible. Utilice Unity Profiler durante el desarrollo de su proyecto, junto con herramientas de creación de perfiles específicas de la plataforma, como Xcode para dispositivos iOS.
  • No utilices más de un tercio de la RAM disponible en tu dispositivo de destino de gama más baja. Esto garantiza que su 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 obtener más consejos de optimización 2D, consulte estos recursos:

Unity: crea niveles 2D rápidamente con Tilemap
EJEMPLO DE MAPA DE TIEMA
Una breve introducción a Tilemap

El componente Tilemap le permite crear niveles 2D de manera eficiente utilizando mosaicos en una cuadrícula superpuesta. Comprende una serie de elementos, entre ellos:

Puede crear niveles 2D utilizando una combinación de Sprites y GameObjects, y controlar propiedades como Ordenación de capas, Colisionadores de mapas de mosaicos y Mosaicos animados, entre otros. También puedes pintar Spritescuadrados, hexagonalese isométricos.

Pinte sus niveles con Tilemap, de modo que el componente Tilemap Collider 2D genere automáticamente un colisionador alrededor de los mosaicos (según la configuración del tipo de colisionador del mosaico), cuando se aplique a un GameObject de Tilemap.

Veamos las mejoras de rendimiento de las que se beneficia con Tilemap en comparación con las escenas creadas con Sprites.

Mapa de mosaicos con menos objetos
TILEMAP EN LA DEMOSTRACIÓN 2D DE UNITY DRAGON CRASHERS
Menos objetos de juego

El uso de 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 una gran cantidad de Sprites en tu juego, todos ellos como GameObjects separados. Hay componentes en cada uno de esos Sprite GameObjects, incluidos un Transform y un Renderer, que ocupan memoria. Otros componentes, como Colliders, vienen con una sobrecarga de CPU.

En comparación, un Tilemap usa un Renderer para todo el mapa y todos sus mosaicos. Esto genera menos gastos generales porque solo maneja sus propias estructuras de datos, en comparación con tener múltiples estructuras de datos en la memoria.

Tener menos GameObjects da como resultado una jerarquía más limpia, lo que significa que no tendrás que desplazarte por 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 USANDO SPRITES (IZQUIERDA) Y EL OTRO USANDO TILEMAPS (DERECHA)
Menor tamaño de las escenas

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

Cargar escenas en Unity es un proceso de dos partes: Primero, los datos se leen del disco. Este es el proceso que suele llevar 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. Básicamente, restaura datos y objetos desde un estado guardado. Unity realiza la serialización internamente para que cada vez que cargue un archivo de escena en el Editor y en tiempo de ejecución, tome esos archivos guardados y los convierta en objetos de Unity.

En la imagen de arriba, puede ver una comparación entre dos archivos de escena serializados, uno que usa 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 mosaicos. Las reglas para todos los mosaicos, incluido el tipo de mosaicos utilizados, se establecen en la parte superior del mapa de mosaicos. Cada uno de los mosaicos anteriores indica propiedades como el mosaico utilizado y su posición.

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

De esta comparación queda claro cuánto trabajo tiene que hacer la serialización de Sprite. En particular, la escena que usa Sprites tiene 370.000 líneas en su archivo, mientras que la escena con Tilemaps tiene 30.000 líneas. Los tamaños más pequeños de proyectos y repositorios dan como resultado tiempos de iteración más rápidos y flujos de trabajo más fluidos.

Si desea ver sus propias escenas como un archivo de texto, vaya a la configuración del Editor, active el modo de serialización de activos, haga clic en Forzar textoy abra el archivo de escena .unity en el Editor de texto.

Unity: menos colliders con Tilemap
TIEMAP COLLIDER 2D COMBINADO CON COMPUESTO COLLIDER 2D
Menos colisionadores

Puede combinar Tilemap Collider 2D con Composite Collider. Esto no solo reducirá la cantidad de colisionadores y sprites, sino que también brindará más eficiencia a su producción porque no es necesario reconstruir formas complejas de colisión cada vez que realiza un cambio. El Composite Collider se encarga de eso.

Casos de uso de Tilemaps
UN CASO DE USO QUE COMPARA UN ELEMENTO INDIVIDUAL 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, incluido el tiempo para la preparación selectiva y la limpieza para el renderizado. Al utilizar Tilemaps, tendrá menos componentes de Renderer, lo que ahorrará algo de trabajo a las CPU.

Costo de sacrificio reducido

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

En la vista de cámara, la selección tiene un costo por renderizador y por cámara. Cada cámara tiene que realizar comprobaciones de selección en cada componente del 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 DEPURADOR DE MARCOS
menos llamadas por lotes

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

Puedes verificar el procesamiento por lotes mirando el panel de estadísticas en la vista de Juego. También puede utilizar el Depurador de fotogramas para determinar por qué los elementos no se procesan por lotes.

Escenas en las que se usan una tabla de tilemaps y sprites
Una velocidad de fotogramas más rápida

Para alcanzar los 60 fps, cada fotograma puede tardar un máximo de 16 ms en renderizarse. Cuando se perfiló la escena de muestra en un antiguo iPhone 7, la versión basada en Sprite tenía 244 ms por cuadro, mientras que la versión 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 utilizó solo 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 de rendimiento entre las dos escenas.

Demostración de Sprite Atlas
USANDO SPRITE ATLAS EN DRAGON CRASHERS
Empacar Sprites con Sprite Atlas

Sprite Atlas es la herramienta de edición que te permite empaquetar tus Sprites en texturas para optimizar el uso de la memoria y dibujar llamadas. Cree un activo de Sprite Atlas que incluya todos los sprites utilizados en su Tilemap para que Tilemap Renderer pueda agruparlos en lotes en una sola llamada de sorteo (siempre que todos los Sprites encajen en una sola textura).

Más recursos para creadores de juegos 2D

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

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

Descripción general de las herramientas 2D: Consulte nuestra práctica descripción general de lo que Unity tiene para ofrecer a los desarrolladores 2D.

Patrones de procedimiento con Tilemaps – Parte I y Parte II: Añade diversidad a tu juego con la generación de procedimientos. Estas publicaciones explican algunos de los algoritmos que puede utilizar con Tilemap y RuleTile.

¿Te resultó útil este contenido?