Usando el match 3 en nuestro juego
Clase 16 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 crear una función enumerador para intercambiar piezas?
En el desarrollo de un juego de lógica como Max3, una característica clave es el intercambio de piezas. Este proceso no es simple, ya que debe permitir al jugador ver el intercambio en tiempo real y determinar si el movimiento es válido en función de los matches encontrados. Para lograr esto, transformamos la función swapTiles en un enumerador, lo que nos permite manejar la secuencia y el tiempo de ejecución del intercambio de manera controlada.
Implementación de la nueva variable swappingPieces
Primero, añadimos una variable booleana llamada swappingPieces al comienzo de nuestra clase. Esta variable sirve para gestionar el estado del juego evitando que múltiples movimientos se procesen simultáneamente.
private bool swappingPieces = false;
Conversión de swapTiles a un enumerador
La función swapTiles deja de ser del tipo void y pasa a ser un enumerador para controlar el flujo y la visualización de los movimientos en el juego.
-
Esperar el movimiento: Utilizamos
yield return new WaitForSecondspara pausar la ejecución por 0.6 segundos, lo que permite visualizar el intercambio de piezas.yield return new WaitForSeconds(0.6f); -
Detección de matches: Creamos las variables
startMatchesyendMatchespara almacenar los posibles matches al inicio y al final del intercambio, utilizando la funcióngetMatchesByPiece.var startMatches = getMatchesByPiece(startTile.x, startTile.y, 3); var endMatches = getMatchesByPiece(endTile.x, endTile.y, 3); -
Proceso de matches: Si se detectan matches, se actualiza el sistema y se destruyen las piezas correspondientes; de lo contrario, las piezas vuelven a su posición original.
if(!foundMatch){ startPiece.Move(startTile.x, startTile.y); endPiece.Move(endTile.x, endTile.y); }
¿Qué hacer si no se encuentran matches?
En el juego Max3, un movimiento que no forme un match es considerado inválido, por lo que las piezas deben regresar a su posición inicial:
- Revierta las posiciones en el array de coordenadas.
- Asegúrese de que las piezas visibles regresen a su lugar original.
- Restablezca los valores de
startTileyendTileanull.
if (!foundMatch) {
startPiece.Move(startTile.x, startTile.y);
endPiece.Move(endTile.x, endTile.y);
pieces[startTile.x, startTile.y] = startPiece;
pieces[endTile.x, endTile.y] = endPiece;
}
startTile = null;
endTile = null;
swappingPieces = false;
yield return null;
¿Cómo encontrar y corregir errores en la función de detección?
Es vital que nuestra lógica de matches funcione bien en un juego Match3. Si el sistema no detecta matches, debemos revisar nuestras funciones analizando desde la llamada swapTiles, pasando por getMatchByPiece hasta getMatchByDirection.
Una línea incorrecta que afectaba el funcionamiento del código era:
nextY *= direction.y;
Esto debe corregirse para avanzar correctamente por las coordenadas:
nextY += direction.y;
Tras aplicar los cambios correctos, ejecuta el juego en Unity para asegurarte de que los matches ahora se identifican correctamente. ¡Continúa perfeccionando e iterando sobre tu implementación, y tu juego será más robusto y emocionante! Recuerda que los errores son oportunidades de aprendizaje, y cada ajuste te acerca a un resultado más óptimo.