Flujo de trabajo de activos de mapas de mosaicos 2D: De la imagen al nivel

ANDY TOUCH / UNITY TECHNOLOGIESContent Developer for Unity Technologies
Jan 25, 2018|10 minutos
Flujo de trabajo de activos de mapas de mosaicos 2D: De la imagen al nivel
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.

En Unity 2017.2, presentamos una nueva incorporación al conjunto de funciones 2D: ¡Mapas de mosaicos! Usando Tilemaps, puedes diseñar y crear rápidamente niveles 2D usando una combinación de Sprites y GameObjects, y tener control sobre propiedades tales como ordenamiento de capas, colisionadores de mapas de mosaicos, mosaicos animados y más. En esta publicación de blog, explicaré el flujo de trabajo completo, desde la importación de su archivo de imagen a Unity hasta un nivel diseñado para un juego de plataformas 2D.

A modo de resumen, el flujo de trabajo se puede resumir de la siguiente manera, con cada elemento relacionado con un activo o un componente en el Editor de Unity :

Sprite -> Mosaico -> Paleta -> Pincel -> Mapa de mosaicos

Desde el punto de vista de la No Unidad, estos términos podrían parecer un poco abstractos. Imagínese el proceso de una pintura real sobre un lienzo real:

Color -> Pintura -> Paleta de mosaicos -> Pincel -> Lienzo

¡Hay una lógica similar para cada paso del proceso e incluso nombres similares para cada paso!

Para esta publicación, utilizaré esta imagen 'GrassPlatform_TileSet' como ejemplo principal:

Imagen de 'GrassPlatform_TileSet'

El resultado final es un nivel construido con estas piezas en el que un personaje 2D puede correr como si fuera un 'nivel':

Imagen de ejemplo de personaje 2D corriendo
1) Sprites

La importación de una imagen a Unity se puede realizar de varias maneras:
- Guardar el archivo de imagen deseado en la carpeta 'Activos' del proyecto.
- Desde el menú superior, seleccionando ‘Activos -> Importar nuevo activo’ y luego seleccionando el archivo deseado.
- Arrastrar el archivo de imagen desde el explorador de archivos a la "Ventana del proyecto" en el editor de Unity (¡esta es probablemente la forma más fácil!)

Una vez que la imagen se importa a su proyecto, sus configuraciones de importación de tipo de textura predeterminadas se definen según el modo de comportamiento en el que se encuentra configurado actualmente su proyecto: 2D o 3D.

Este modo se configura originalmente cuando se crea un nuevo proyecto:

Imagen del modo que se establece cuando se crea un nuevo proyecto

O se puede cambiar desde la Configuración del editor:

Imagen de configuración del editor

Como mi proyecto ya está configurado para el modo de comportamiento 2D, entonces 'GrassPlatform_TileSet' se importará automáticamente con el tipo de textura 'Sprite (2D y UI)', que es la configuración que el activo Tile requerirá para hacer referencia al Sprite.

Como 'GrassPlatform_TileSet' es una serie de sprites en una imagen, necesitaremos dividirlo en sprites individuales; esto se puede hacer configurando el Modo de Sprite de 'Único' a 'Múltiple' y abriendo el Editor de Sprites:

Configuración de imagen para el modo Sprite

La ventana del Editor de Sprites te permite "cortar" una imagen en múltiples sprites; de esta manera puedes trabajar en una hoja de sprites en el software de edición de imágenes que desees y definir qué áreas de la imagen se tratan como sprites "individuales" directamente en Unity. ¡No es necesario hacer malabarismos y administrar cientos de archivos de imágenes individuales!

Como 'GrassPlatform_TileSet' es una imagen compuesta de una serie de mosaicos, podemos usar la configuración de corte de cuadrícula del editor de sprites para dividir automáticamente la imagen en múltiples sprites. Las dimensiones de cada 'mosaico de celda' en este conjunto de mosaicos son 64 píxeles por 64 píxeles, por lo que podemos ingresar estas configuraciones y dejar que el Editor de sprites genere automáticamente los fragmentos de sprites requeridos:

Imagen de la ubicación de los ajustes en el modo Sprite

¡Y después de hacer clic en el botón "Cortar", ahora tenemos un conjunto de sprites cortados!

Imagen de un conjunto de sprites en rodajas

En la ventana del Editor de sprites, cada sprite cortado se puede seleccionar y editar. Por ejemplo, puedes establecer nombres para cada sprite e incluso modificar manualmente valores como la posición y los pivotes.

Luego debemos 'Aplicar' los cambios al recurso Sprite (haciendo clic en el botón 'Aplicar' cerca de la esquina superior derecha del Editor Sprite), lo que nos permitirá hacer referencia a cada sprite cortado individualmente en la ventana Proyecto:

Imagen de la aplicación de cambios a los sprites

Ahora que nuestra hoja de sprites se ha dividido en sprites individuales, ahora debemos "convertirlos" en mosaicos.

2) Activo de mosaico

El mosaico es un activo completamente nuevo agregado en Unity 2017.2. Su propósito es almacenar datos para que el mapa de mosaicos los utilice en una celda específica de la cuadrícula.

El activo Tile predeterminado base (que se puede generar desde 'Crear -> Tile' en la ventana Proyecto) permite asignarle un Sprite y también otras personalizaciones como el Tinte del Sprite y el tipo de Collider que usaría en el Tilemap (que se explicará más adelante).

Ejemplo de imagen de aplicación de personalizaciones en Sprite
3) Tile Palette Window

¡Unity 2017.2 presenta una nueva ventana: la paleta de mosaicos! Esta ventana es fundamental para utilizar el nuevo sistema Tilemap, ya que actúa como una interfaz para seleccionar qué Tiles utilizar y cómo se editará el Tilemap con ellos.

Ejemplo de imagen de la nueva paleta de mosaicos

Antes de que podamos agregar el mosaico 'TopGrassTile' a la ventana Paleta de mosaicos, primero debemos crear una nueva paleta. Las paletas se pueden utilizar para organizar sus conjuntos de mosaicos en lugar de "almacenarlos" todos (¡podrían ser cientos o más!) en un espacio de trabajo en la ventana.

Imagen de Paletas utilizadas para organizar

En el menú desplegable Paleta hay una opción para crear una paleta completamente nueva:

Imagen del menú desplegable de la paleta

¡Es tan simple y fácil como arrastrar y soltar para agregar 'TopGrassTile' a esta paleta recién creada!

Imagen de arrastrar y soltar para agregar 'TopGrassTile'

Sin embargo, en algunas situaciones podríamos estar trabajando con cientos y cientos de Sprites que construyen nuestra escena 2D. Sería una tarea que llevaría mucho tiempo crear manualmente un recurso de mosaico para cada uno de estos Sprites y luego arrastrar y soltar cada uno individualmente en la Paleta.

Afortunadamente, existe un flujo de trabajo que se puede usar para generar automáticamente un conjunto de mosaicos (uno para cada sprite) y asignarlos todos a la paleta deseada. ¡Y además es tan simple y fácil como arrastrar y soltar! En lugar de arrastrar un activo de mosaico a la paleta, arrastre la hoja de sprites de origen que contiene los sprites cortados. En este caso, 'GrassPlatform_TileSet':

Imagen de arrastrar la hoja de Sprites de origen que contiene los Sprites cortados
4) Cuadrícula y mapa de mosaicos

Ahora que nuestra hoja de sprites 'GrassPlatform_TileSet' está configurada correctamente en la ventana Paleta de mosaicos, ¡es hora de comenzar a construir un nivel 2D!

Para comenzar, necesitamos crear un nuevo 'Tilemap' en nuestra escena actual; esto se puede hacer desde el menú desplegable 'GameObject -> Objetos 2D -> Tilemap'. Sin embargo, esto no solo crea un GameObject 'Tilemap' (con componentes relacionados) sino también un GameObject 'Grid' del cual el GameObject Tilemap es automáticamente un hijo.

La estructura de GameObject más similar a la configuración 'Cuadrícula <-> Mapa de mosaicos' es el sistema de interfaz de usuario de Unity; donde el GameObject padre Canvas actúa como un contenedor de diseño para todos sus GameObjects de interfaz de usuario secundarios (como texto e imágenes). El GameObject 'Grid' utiliza el componente 'Grid' para definir las dimensiones de todos sus GameObjects Tilemap secundarios. Hay opciones que permiten cierta personalización en el diseño:

La imagen muestra opciones que permiten la personalización.

Luego, el componente Tilemap y el componente Tilemap Renderer construyen el GameObject secundario Tilemap; el primero contiene los datos de los mosaicos pintados en él y el segundo define las configuraciones visuales de cómo se representa.

Imagen sobre conjuntos definitorios

El sistema Tilemap ha sido diseñado para que varios GameObjects Tilemap puedan ser hijos de la misma cuadrícula, lo que significa que el resultado final de tu nivel puede componerse fácilmente mediante múltiples capas de diferentes Tiles:

Imagen que muestra un ejemplo de múltiples capas de diferentes mosaicos

Cada renderizador de mapas de mosaicos le brinda control sobre el material utilizado para renderizar sus mosaicos, la capa de clasificación que utiliza (que es el mismo sistema de capas que utilizan los renderizadores de sprites, los lienzos de interfaz de usuario y los sistemas de partículas) y también cómo reacciona a la máscara de sprite.

5) Pintar sobre el mapa de mosaicos

Antes de poder pintar mosaicos en el mapa de mosaicos, se deben seleccionar dos cosas: qué mapa de mosaicos está enfocado actualmente y qué pincel está en uso actualmente.

El primero se puede elegir desde el menú desplegable 'Mapa de mosaicos activo' en la ventana Paleta de mosaicos debajo de Opciones de edición:

Selección de mapa de mosaicos desplegable

Esta lista desplegable mostrará todas las instancias del componente 'Tilemap' en la escena y le permitirá seleccionar una para pintarla y editarla. La captura de pantalla anterior solo muestra una opción 'Tilemap', y lleva el nombre del GameObject Tilemap predeterminado, mientras que una escena más compleja con múltiples Tilemaps podría mostrar una lista de posibles Tilemaps activos como esta:

Menú desplegable para selección de terreno

Para el ejemplo 'GrassPlatform_TileSet', al cambiar el nombre del GameObject "Tilemap" para que sea más preciso, también se actualizarán los nombres de la lista de Tilemap activos:

Selección desplegable para el mapa de mosaicos de la plataforma terrestre

Lo siguiente que debemos seleccionar es el Pincel actual. Mientras que el activo Tile determina qué datos contendrá una celda (elementos visuales, tipo de colisionador, etc.), un activo Brush define cómo se colocará un Tile (o Tiles) en un Tilemap. Actualmente, Unity solo tiene un pincel incorporado (llamado 'Pincel predeterminado') para seleccionar; y tiene la funcionalidad esperada de su nombre, como colocar, borrar, mover y rellenar mosaicos en el mapa de mosaicos. Sin embargo, en el GitHub del equipo de Unity Technologies hay un repositorio de extras 2D que tiene una variedad de ejemplos de cómo puedes crear tus propios pinceles y mosaicos personalizados. Una vez que estos se importen a su proyecto, el menú Pincel actual (en la parte inferior de la ventana Paleta de mosaicos) le permitirá elegir qué pincel usar:

Ubicación para elegir qué pincel utilizar

Si bien este artículo no profundiza en el uso de pinceles y mosaicos programables, es un área muy poderosa para estudiar e integrar en su conjunto de herramientas de diseño de niveles basado en mapas de mosaicos.

Con el Mapa de mosaicos activo y el Pincel actual establecidos, podemos seleccionar un mosaico específico, en la ventana Paleta de mosaicos, y luego pintarlo en el Mapa de mosaicos en la Escena. También deberá asegurarse de que el ícono "Pincel" en las Herramientas de edición también esté seleccionado:

Seleccionar el icono 'Pincel' en las herramientas de edición

¡Éxito! ¡Se están pintando mosaicos en el mapa de mosaicos! Sin embargo, es posible que notes que los mosaicos son ligeramente más pequeños que el tamaño de las celdas de la cuadrícula. Esto no es un error, pero debemos dar un paso atrás para explicar por qué y cómo puedes cambiar el valor predeterminado.

El tamaño de celda del componente Cuadrícula utiliza las unidades de distancia del espacio mundial de Unity (por ejemplo, un cubo primitivo de Unity con una escala predeterminada de 1 para cada eje tendrá el mismo tamaño que una celda en la Cuadrícula predeterminada). Cada recurso de Sprite tiene un valor de píxeles por unidad en su configuración de importación, siendo el valor predeterminado 100:

Imagen de configuración estándar para píxeles
Arrastrar y soltar imágenes
Selección de diferentes imágenes
Imagen de ejemplo
Imagen de ejemplo
Imagen de ejemplo
Imagen de ejemplo
Imagen de ejemplo