Contenido del curso

Mecánica Principal

Piezas aleatorias en la cuadrícula Unity

Resumen

Crear un componente Piece en Unity te permite poblar tu cuadrícula con sprites variados y dejar el tablero listo para sumar mecánicas de movimiento. Aquí construyes el script, generas variantes de prefab y conectas todo desde la clase Board para que cada celda muestre una pieza aleatoria.

Cómo defines el script Piece en C#

El componente Piece se parece al de Tile, pero suma un detalle clave: el tipo de pieza. Dentro de tu carpeta de scripts crea un nuevo C# script llamado Piece y ábrelo en Visual Studio.

Las propiedades iniciales son las mismas de Tile: public int x, public int y y una referencia public Board board. Lo que cambia es que cada pieza necesita identificar qué animal representa, y para eso entra en escena el enum.

Por qué usar un enum para representar el tipo de pieza

Un enum es una lista cerrada de opciones de la que seleccionas una sola. Sirve para tipos de piezas, estados del juego o cualquier escenario donde necesitas elegir entre alternativas predefinidas.

En el juego, las opciones corresponden a cada sprite del asset pack:

  • Elephant.
  • Giraffe.
  • Hippo.
  • Monkey.
  • Panda.
  • Parrot.
  • Penguin.
  • Pig.
  • Rabbit.
  • Snake.

Después declaras la variable que guarda el tipo actual con public Type pieceType;.

¿Qué es un enum en Unity? Es un tipo de dato que define una lista fija de valores nombrados. Lo usas cuando solo una opción puede ser válida a la vez, como elegir entre Elephant, Giraffe o Panda.

Cómo construyes la función Setup de la pieza

Igual que en Tile, agregas una función pública Setup que recibe int x_, int y_ y Board board_, y asigna esos valores a las propiedades internas. Por ahora basta con eso; más adelante sumarás funcionalidad a este archivo.

Cómo creas los prefabs y sus variantes en Unity

Vuelve a Unity y arrastra el sprite del elefante a la escena. Esto genera un game object con su Sprite Renderer. Con Add Component le añades el script Piece, dejas vacíos x, y y board (se llenan en tiempo de ejecución) y eliges Elephant en pieceType.

Arrastra ese objeto a la carpeta de prefabs para crear el prefab base. Ahora vienen las variantes.

Cómo duplicar prefabs y mantenerlos sincronizados

Selecciona el prefab del elefante y presiona Ctrl + D o Cmd + D en Mac. Renombra el duplicado, asigna el sprite correspondiente en el Sprite Renderer y cambia el pieceType en el componente Piece. Repite con jirafa, hipopótamo, mono, panda, loro, pingüino, cerdo, conejo y serpiente.

Al arrastrar los duplicados a la carpeta de prefabs, Unity pregunta si quieres guardarlos como prefabs originales o como variantes de prefab. Elige variantes.

¿Para qué sirve una variante de prefab? Hereda las propiedades del prefab base. Si cambias la escala o el ordering layer en el original, esa modificación se propaga a todas las variantes sin tocarlas una por una.

Cómo conectas las piezas con la clase Board

Abre el script Board en Visual Studio. Agrega un array público de game objects llamado availablePieces. Ese array contiene los prefabs que pueden aparecer en la cuadrícula.

Dentro de Start, después de SetupBoard y PositionCamera, llama a una nueva función SetupPieces. Visual Studio puede generarla automáticamente con la recomendación de generar método.

Cómo seleccionar una pieza aleatoria con Random.Range

La lógica de SetupPieces es casi idéntica a SetupBoard: dos for anidados recorren ancho y alto, instancian el objeto, lo hacen hijo del transform actual y llaman a Setup del componente Piece.

La diferencia está en qué objeto instancias. En lugar de usar el prefab fijo de Tile, eliges una pieza al azar:

csharp var selectedPiece = availablePieces[UnityEngine.Random.Range(0, availablePieces.Length)];

Random.Range con enteros recibe un mínimo inclusivo y un máximo exclusivo, así que devuelve un número entre 0 y availablePieces.Length - 1, justo lo que necesitas para indexar el array.

Por qué las piezas no se ven y cómo arreglar el ordering layer

Al dar play, las piezas se crean pero quedan ocultas tras los tiles. Como ambos elementos son sprites, Unity los dibuja según el ordering layer del Sprite Renderer.

La solución es rápida: en el prefab base del elefante, cambia el ordering layer de 0 a 5. Los tiles permanecen en 0 y las piezas pasan a dibujarse encima. Gracias a las variantes de prefab, el cambio se aplica al resto de animales automáticamente.

¿Qué es el ordering layer en Unity? Es un valor numérico del Sprite Renderer que define el orden de dibujo. Sprites con número mayor se renderizan encima de los menores dentro de la misma capa.

Con la cuadrícula poblada y los sprites visibles, el tablero ya luce como un match 3. Falta la mecánica de movimiento, y ahí entra una herramienta clásica de programación para animar elementos en pantalla. ¿Ya tienes una idea de cuál es? Cuéntame en los comentarios qué dudas te surgieron al armar tus prefabs.