Colapsando las piezas
Clase 18 de 34 • Curso de Desarrollo de Videojuegos Móviles con Unity
Contenido del curso
- 8

Creando la cuadrícula
08:00 - 9

Ajustando la cámara
13:06 - 10

Sistema de coordenadas para instanciar las piezas
05:16 - 11

Instanciando las piezas en la cuadrícula
13:39 - 12

Moviendo las piezas
07:53 - 13

Intercambiando las piezas de lugar
14:45 - 14

Permitiendo solo ciertos tipos de movimientos
05:38 - 15

Creando las funciones del match 3
16:13 - 16

Usando el match 3 en nuestro juego
10:21 - 17

Eliminando los matches por defecto
12:31 - 18

Colapsando las piezas
17:31 - 19

Match 3 combo
07:47 - 20

Rellenando las piezas
07:36 - 21

Mejorando la animación de las piezas
07:37
- 24

Hablemos de diseño
01:34 - 25

Agregando un sistema de puntos
16:45 - 26

Sistema de tiempo
07:05 - 27

Interfaz para el sistema de tiempo
09:26 - 28

Creando sistema de UI
06:26 - 29

Pantalla de game over
14:37 - 30

Agregando funcionalidad a la pantalla de game over
09:16 - 31

Reiniciando el juego
08:40 - 32

Agregando audio
10:05 - 33

Terminando el juego
07:39
¿Cómo optimizar la mecánica principal del juego en Unity?
Aprovechar al máximo la mecánica principal de un juego es esencial para asegurar una experiencia de juego fluida y atractiva. En este desarrollo, uno de los aspectos clave es asegurarse de que las piezas se muevan correctamente cuando hay un espacio vacío. El enfoque es implementar una lógica que permita que las piezas superiores colapsen hacia abajo para llenar estos vacíos, un concepto fundamental en juegos de tipo "Match 3".
¿Qué modificaciones se deben hacer en la función de intercambio de piezas?
Primero, se realizaron varias mejoras en la función Swap Tiles para manipular cómo se eliminan las piezas. Anteriormente, dos bucles separados se encargaban de gestionar los matches, uno para comienzos y otro para finales. La solución ahora implementa una lista combinada llamada All Matches, que simplifica el proceso:
var allMatches = startMatches.Union(endMatches).ToList();
Este cambio permite eliminar las piezas utilizando una nueva función llamada Clear Pieces, mejorando la eficiencia y legibilidad del código al centralizar la eliminación de las piezas encontradas.
¿Cómo se eliminan piezas y se inician las funciones de colapso?
Dentro de Clear Pieces, se utiliza un ciclo for each para eliminar cada pieza identificada y desencadenar procesos para manejar las piezas ubicadas en posiciones superiores:
foreach (var piece in piecesToClear)
{
ClearPieceAt(piece.x, piece.y);
}
Luego, dos nuevas funciones son agregadas: getColumns para identificar columnas que necesitan ser colapsadas y se llama a collapseColumns, que efectúa el colapso real de las piezas.
¿Cómo se identifican y colapsan las columnas afectadas?
Para identificar las columnas afectadas, getColumns itera sobre las piezas a limpiar, añadiendo su columna a una lista de resultados solo si aún no está presente. Esta lista se pasa a collapseColumns, que colapsa las piezas.
var result = new List<int>();
foreach (var piece in piecesToClear)
{
if (!result.Contains(piece.x))
{
result.Add(piece.x);
}
}
En collapseColumns, se establece una lista de todas las piezas que se moverán. Este método comienza desde la fila más baja e identifica espacios vacíos, rellenándolos con las piezas válidas de arriba. El código emplea un ciclo anidado que busca las piezas que pueden moverse hacia abajo:
for (int yPlus = y + 1; yPlus < height; yPlus++)
{
if (pieces[column, yPlus] != null)
{
pieces[column, yPlus].Move(column, y);
pieces[column, y] = pieces[column, yPlus];
movingPieces.Add(pieces[column, y]);
pieces[column, yPlus] = null;
break;
}
}
¿Qué sucede en Unity tras implementar estos cambios?
Al ejecutar la simulación en Unity después de realizar estos cambios, se observa que las piezas colapsan hacia abajo como se esperaba, completando de manera más eficiente y visualmente atractiva la mecánica del juego. Este paso es crucial para mejorar la experiencia del usuario en juegos de tipo "Match 3". ¡Continúa explorando nuevas funcionalidades y mejora tu juego constantemente!