Una ronda relámpago de excelentes consejos para juegos 2D

¿Estás planeando hacer un juego 2D con Unity? Entonces eche un vistazo a estos prácticos consejos de nuestro Gerente de Producto Técnico 2D, Rus Scammell, y del Gerente de Marketing de Producto 2D, Eduardo Oriz, que lo ayudarán a comenzar rápidamente y trabajar de manera eficiente durante todo su proyecto.

Utilice la plantilla 2D para comenzar rápidamente con un nuevo proyecto. La plantilla está disponible en Unity Hub. Las configuraciones únicas incluyen:
- Una escena predeterminada que utiliza una vista 2D y viene con una cámara configurada en proyección ortográfica y se aclara en un color sólido.
- El editor está configurado en modo 2D de forma predeterminada para que las nuevas texturas se importen como sprites.
- Iluminación global en tiempo real deshabilitada
- Instalación de paquetes 2D, incluidos 2D Animation, 2D Pixel Perfect, 2D PSD Importery 2D SpriteShape, así como las dependencias necesarias

A partir de la versión 2020.2, los elementos del menú 2D se muestran como menús de nivel superior para la creación de GameObject y Assets. Estos incluyen un conjunto de sprites 2D primitivos para creación rápida de prototipos. También se agregan menús para funciones más nuevas como SpriteShape y la cámara Pixel Perfect.

Píxeles por unidad (PPU) es un concepto importante en el desarrollo 2D. El PPU de un Sprite determina cuántos píxeles de ancho o alto en una imagen de Sprite corresponden a una unidad de distancia en el espacio mundial.
Considera el PPU de tus Sprites lo antes posible. Además de controlar la densidad de píxeles, el PPU también afecta la forma en que los modos de dibujo de Sprite Renderer y otros sistemas como Tilemap utilizan los Sprites. Elija una densidad de píxeles que se adapte al diseño de su juego y la plataforma de destino, y evite texturas innecesariamente grandes.

El 2D PSD Importer importa archivos PSB de Adobe Photoshop en capas a Unity. Le permite utilizar funciones como Mosaico para generar automáticamente una hoja de sprites a partir de las capas importadas y la plataforma de personajes. Luego, Unity vuelve a ensamblar los Sprites de un personaje tal como estaban organizados en sus archivos de origen. El Importador está diseñado para funcionar de forma óptima con el sistema de 2D Animation y los flujos de trabajo de personajes multicapa.

El objetivo es reducir el número de pasadas necesarias para dibujar el color final en la pantalla. Cuando los píxeles son semitransparentes, debes considerar cada píxel superpuesto al calcular el color final. La sobreexposición de píxeles transparentes reduce el rendimiento de la GPU, especialmente en dispositivos menos potentes o cuando se requieren velocidades de cuadro más altas. Todos los Sprites de tu escena se considerarán transparentes, pero hay formas de reducir el sobredibujo.
Unity sobredibujará los píxeles solo dentro de tu máscara de sprite. Con un rectángulo completo, se sobredibujará el área completa, pero si el Tipo de malla se establece en Estrecho, el área a sobredibujar se reduce ya que la malla generada solo sigue el contorno de tu Sprite, ignorando las áreas vacías. Si quieres tener más control sobre el contorno de la malla, puedes cambiarlo desde el Editor de Sprites.

También puedes reducir el sobredibujo fusionando Sprites estáticos superpuestos. Si los Sprites no necesitan moverse o no los necesitas para un efecto de paralaje, considera fusionarlos una vez que el diseño de tu nivel esté finalizado.

Cuando tenga muchos Sprites con colisionadores 2D estáticos, combínelos con el componente Colisionador 2D compuesto. Esto proporciona un mejor rendimiento y una colisión más suave con toda la superficie. El Composite Collider se puede utilizar con mapas de mosaicos; en la imagen de arriba, los mosaicos morados de la pantalla se utilizan como colisionadores. Para habilitarlo, agregue el componente y marque la casilla Compuesto.
También se puede utilizar un colisionador 2D compuesto con GameObjects principales. Asegúrese de que los colisionadores secundarios estén habilitados marcando la casilla Usado por compuesto. Otra forma de optimizar Colliders es dibujar manualmente un polígono simple que funcione bien con su GameObject.

Cada Renderer adjunto a un GameObject como un Sprite tiene cierta sobrecarga. Para mostrar muchos Sprites estáticos de manera eficiente, use el Tilemap Renderer para diseñar su juego de una manera más eficiente y conveniente. Puedes renderizar cientos de Sprites con un solo Renderizador. Cuando tienes muchos Sprites para renderizar pero no necesitas ordenarlos, usa el modo Tilemap Chunk para reducir el uso de CPU y memoria, lo cual es importante si apuntas a dispositivos de gama baja. Para usarlo, coloque todos los mosaicos estáticos en el mismo mapa de mosaicos y habilite el modo fragmento.
Asegúrate de que todos los mosaicos también estén en el mismo Atlas de Sprites. Es posible que los mosaicos no se muestren correctamente en la Vista de escena, pero se ordenarán correctamente cuando ingrese al Modo de reproducción. Un enfoque es diseñar tu nivel usando el Modo Individual y cambiar a Trozo cuando estés listo para publicar.
Si necesitas que los Sprites se ordenen correctamente, por ejemplo, para mover un personaje delante y detrás de las fichas individuales, utiliza el Modo Individual. Para los Sprites que necesitan moverse o que tienen funcionalidad de juego, use el Modo Regular.
Sprite Shape es la herramienta 2D para diseñar formas y niveles orgánicos. De forma predeterminada, la API Sprite Shape le permite cambiar los nodos del spline en tiempo de ejecución, lo que puede afectar el rendimiento. Si no necesita ese cambio de tiempo de ejecución, puede hornear o almacenar en caché la geometría del spline para obtener un mejor rendimiento. Seleccione Controlador de forma de sprite, habilite Editar spline y luego Geometría de caché para hornear la malla. Si usa Unity 2019 LTS o versiones posteriores y modifica el spline en tiempo de ejecución, puede obtener una gran mejora en el rendimiento instalando el paquete Burst . Vaya al Administrador de paquetes e instale Burst versión 1.3 o posterior.

Puede utilizar perfiles de formas de Sprite para diseñar entornos similares a como lo haría con un software de dibujo vectorial. Los perfiles se pueden utilizar tanto para el juego como para elementos decorativos. Funcionan bien para diferentes estilos artísticos y llenan grandes áreas rápidamente, todo ello utilizando menos recursos.
Los modos de dibujo del Sprite Renderer te ayudan a ahorrar en el tamaño de tus activos y hacen que el proceso de diseño de niveles sea más divertido. Con Tileable Sprites, puedes tener diferentes GameObjects usando el mismo Sprite en diferentes tamaños sin estirarlo. Vaya al Editor de Sprites y mueva los controladores amarillos para enmarcar la parte del Sprite que se podrá colocar en mosaico. Aplicarlo y luego ir al GameObject y cambiar el modo de dibujo del renderizador de sprites al modo mosaico.
También puedes diseñar tu nivel con Sprites de 9 cortes, usando bloques que se ven nítidos y proporcionados mientras los escalas y organizas. En el Editor de Sprites, seleccione el área que se puede cortar y asegúrese de que las esquinas encajen en el área de la esquina que no se puede repetir y luego seleccione el Modo de dibujo para cortar.
Al diseñar juegos en 2D, habrá situaciones en las que algunos de tus GameObjects estarán en la misma capa de clasificación y orden. Podrías crear muchas capas y algo de lógica detrás de tus Sprites en movimiento para mostrarlos en el orden correcto, pero esto no es eficiente. La forma en que le indicamos a Unity el orden correcto para renderizar un Sprite en esas situaciones es con el Modo de Ordenamiento de Transparencia en Configuración del Proyecto. Unity ordena los Sprites en el orden descrito por la dirección de un Vector2 (definido por los ejes X e Y en estas configuraciones). Vea cómo Eduardo Oriz, gerente de marketing de productos de Unity, y Rus Scammell, gerente de productos, configuraron esta optimización alrededor de la marca 9:15 en su charla de Unite Now .

Crear un clip de animación cuadro por cuadro en Unity es sencillo. Seleccione una secuencia de Sprites en la ventana Proyecto y arrástrelos a la vista de Escena o a la ventana Jerarquía. Se creará automáticamente un clip de animación y un animador.
Si desea agregar los clips de animación a un animador existente, simplemente arrastre esos cuadros de animación al GameObject del animador. El clip se agregará al animador. Mantenga presionada la tecla Alt u Opción mientras arrastra los cuadros de animación hacia la jerarquía si desea crear un GameObject diferente para cada Sprite.

Unity admite tanto la animación cuadro por cuadro como la animación basada en huesos. Estas son las diferencias clave entre los dos enfoques:
Frame-by-frame
- Cada cuadro utiliza un Sprite único
- Los clips de animación adicionales requieren más Sprites
- La velocidad y la velocidad de cuadros suelen ser constantes
- Las animaciones de transición requieren Sprites adicionales
- No funciona con cinemática inversa 2D (2D IK)
A base de huesos
- Cada cuadro de animación utiliza los mismos Sprites.
- Cada clip de animación utiliza los mismos Sprites.
- Funciona bien para velocidades de animación variables.
- El sistema de animación puede crear transiciones para clips.
- Funciona con 2D IK

Instale los paquetes Burst/ Collections para optimizar el rendimiento de la animación 2D para grandes cantidades de huesos y mallas de Sprites con grandes cantidades de vértices. La deformación animada de sprites en tiempo de ejecución también obtendrá un aumento de rendimiento. Esto funciona permitiendo que el paquete de 2D Animation utilice la compilación Burst y utilidades de matriz de bajo nivel para acelerar el procesamiento de Unity de la deformación de la malla Sprite.
Asegúrese de estar utilizando Unity 2020.2 y 2D Animation 5.0.x. Cuando instale el paquete Burst 1.3.3 o más reciente, también debe instalar Collections , que es un paquete de vista previa.


Al preparar un Sprite para manipularlo, tienes control total sobre la malla. Para comenzar rápidamente, el Editor de diseño proporciona una opción de teselación automática. Sin embargo, puedes personalizarlo utilizando las herramientas de malla para agregar y eliminar vértices para crear la malla que necesitas.

Agregue componentes 2D Colliders y Rigidbody 2D a personajes basados en huesos para impulsar el movimiento a través del sistema de física 2D. En la imagen de ejemplo anterior de la charla de Eduardo y Rus, se agregaron Capsule Colliders a cada hueso, así como a los componentes 2D de Rigidbody. Luego se conectaron con juntas de bisagra. Puede utilizar límites de ángulo en cada articulación para limitar el rango de movimiento y también puede alternar si los componentes de Rigidbody conectados a través de una articulación chocan entre sí.

Mantenga una densidad de píxeles constante en todos sus activos. Si su proyecto tiene 32 PPU, por ejemplo, puede esperar que una unidad contenga 32 píxeles, como el mosaico del lado izquierdo de la imagen de arriba.
La cámara 2D predeterminada expresa el tamaño en unidades verticales desde el centro de la cámara. En la imagen de ejemplo que aparece aquí, podemos colocar 10 mosaicos verticalmente:

Si sus recursos aparecen demasiado pequeños cuando los agrega a la vista de Escena, en comparación con su imagen de referencia original, lo más probable es que se deba a una falta de coincidencia de resoluciones.
El PPU predeterminado de Unity para sprites está establecido en 100. Cuando cambiamos la configuración del Sprite Asset a los 32 PPU de nuestro proyecto, el sprite tendrá el tamaño correcto.

De manera predeterminada, el filtrado bilineal está habilitado para que los activos suavicen los bordes duros, pero si desea una apariencia pixelada de estilo retro, cambie el modo de filtro a Punto para obtener imágenes nítidas que ocupen el espacio de pantalla definido al principio.
Cuando tienes muchos activos para importar a tu proyecto, cambiar la configuración de cada Sprite individual para que coincida con la configuración de tu proyecto llevará mucho tiempo. En su lugar, cree una plantilla de importación o un ajuste preestablecido para que cada activo importado tenga la configuración predefinida que desee. Para hacer esto:
1. Seleccione un activo con la configuración que desee
2. Haga clic en el ícono de Configuración junto al recurso Sprite para crear una plantilla a partir de él.
3. Guárdalo con un nombre que te ayude a recordar lo que hace.
4. Conviértalo en predeterminado para que todos los nuevos activos importados tengan esa configuración (verá el Activo preestablecido en la vista de su Proyecto)

Si está trabajando con pixel art, asegúrese de que la pantalla siempre muestre la misma cantidad de píxeles y que todos esos píxeles mantengan el mismo tamaño. Primero, vaya a su Cámara y agregue Pixel Perfect Camera. Establezca el PPU de activo en el que utiliza en su pixel art.
Una vez que agregue el componente Pixel Perfect Camera, tomará el control de la cámara en el modo de reproducción, pero también podrá ver los cambios en el Editor si habilita Ejecutar en modo de edición.

En su proyecto, los personajes y objetos pueden cambiar su posición, rotación o tamaño. De forma predeterminada, tendrán una interpolación suave, pero si quieres mantenerte fiel a las limitaciones de pixel art indicadas por el PPU de tu proyecto, habilita Upscale Texture. Los GameObjects se moverán en incrementos de un píxel. Los cambios de rotación y escala también respetarán las limitaciones visuales. Obtenga más información sobre consejos para crear juegos de 8 y 16 bits con apariencia retro.
Grupos de clasificación: Los grupos de clasificación le permiten agrupar renderizadores 2D. Es posible que estés usando Capas de clasificación y Orden en capa para asegurarte de que el orden de representación sea correcto para cada personaje, pero esto no funcionará si hay superposición y las partes individuales se entrelazan.

Puedes colocar un grupo de clasificación en el GameObject raíz de cada personaje para agrupar los Renderers y ordenarlos como uno solo. Con los grupos de clasificación, los caracteres ya no se entrelazan ni se clasifican como un grupo. Los grupos de clasificación funcionan con todos los renderizadores 2D y también con los sistemas de partículas.
Sprite Atlas: Este recurso reúne varios sprites en una única textura combinada. Unity puede entonces usar esta única textura para aumentar el rendimiento al emitir una única llamada de dibujo en lugar de varias llamadas de dibujo para cada Sprite que se encuentra en una única carpeta.
Al agregar una carpeta a un Atlas de Sprites, puedes agregar y eliminar Sprites libremente de tu Atlas de Sprites a lo largo de tu producción simplemente cambiando el contenido de las carpetas empaquetadas.

También es posible crear variantes de Atlas de Sprites que tengan diferentes tamaños o configuraciones de compresión para apuntar a una variedad de plataformas con los mismos recursos de origen.
Deberías considerar una estrategia de atlas que funcione para tu juego. Sprite Atlas ha sido diseñado para que puedas encontrar un equilibrio entre productividad, flexibilidad y rendimiento.
Vea cómo empoderamos a los artistas 2D; conozca cómo Odd Bug usó luces 2D para crear ambiente en su juego Tails of Iron; descargue el proyecto de muestra 2D The Lost Crypty lea esta guía detallada sobre cómo elegir la mejor resolución para sus activos 2D. Por último, puedes ver la presentación de Unite Now de Eduardo y Rus aquí.
