Eliminando los matches por defecto
Clase 17 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 resolver el problema de piezas coincidentes por defecto en Unity?
Cuando se desarrolla un juego de tipo Match-3 en Unity, nos podríamos encontrar con el problema de que, al crear la cuadrícula de piezas, algunas de estas coincidan de inmediato, lo cual no es deseado. Para solucionar esto, es necesario implementar un algoritmo que verifique y evite piezas coincididas al momento de la creación. Este tutorial te guiará en cada paso necesario para resolver este problema, asegurando que tu juego funcione de manera óptima.
¿Cómo estructuramos nuestro código con una nueva función?
Para comenzar, es crucial separar el proceso de creación de piezas en su propia función. Aquí es donde las piezas se crean en determinadas coordenadas y donde comenzaremos nuestra lógica para evitar coincidencias:
void CreatePieceAt(int posX, int posY) {
// Código de lógica de creación
// Devolución del componente de pieza en las coordenadas dadas.
}
Al trasladar esta lógica a una función independiente, no solo se mejora la organización del código, sino que también permite que esta funcionalidad sea reutilizable y más fácil de depurar.
¿Cómo verificamos la existencia de coincidencias previas?
El siguiente paso es construir la lógica para detectar si la pieza recién creada tiene coincidencias inmediatas. A diferencia de las funciones existentes que verifican en todas las direcciones, necesitamos algo que verifique solo hacia abajo y la izquierda, ya que cuando las piezas se generan, las de arriba y a la derecha todavía no existen:
bool HasPreviousMatches(int posX, int posY) {
// Comprobación hacia abajo y a la izquierda de coincidencias
// Devolver true si se encuentran coincidencias previas
}
La función HasPreviousMatches analiza posibles coincidencias, retornando verdadero si se encuentra alguna, lo que desencadenará la recreación de la pieza.
¿Cómo integramos el control de errores en la creación de piezas?
Es crucial prevenir que el código caiga en bucles infinitos en caso de que no se logre crear una pieza sin coincidencias previas. Para esto, implementamos un sistema de iteraciones máximas y actuales:
int maxIterations = 50;
int currentIteration = 0;
// En el bucle de creación
while (HasPreviousMatches(x, y)) {
// Destruir pieza actual
currentIteration++;
if (currentIteration >= maxIterations) break;
// Crear nueva pieza
}
// Reiniciar iteración al crear una nueva pieza
currentIteration = 0;
Aquí, maxIterations es un control de seguridad que rompe el ciclo si se alcanzan demasiados intentos sin éxito, evitando caer en un bucle infinito.
¿Cómo aseguramos la limpieza adecuada de la pieza?
Tenemos que asegurarnos de que, al recrear una pieza, la anterior sea correctamente eliminada. Para esto, creamos una función clearPieceAt que gestiona la eliminación:
void ClearPieceAt(int posX, int posY) {
var pieceToClear = pieces[posX, posY];
// Destruir el objeto de juego de la pieza
// Limpiar referencia de la lista de piezas
}
Es esencial optimizar y evitar duplicación de código al reutilizar funciones como clearPieceAt en otras partes del código donde sea pertinente.
Probemos nuestro juego para asegurar un funcionamiento excelente
Finalmente, al ejecutar el juego en Unity, podemos ajustar la cantidad de piezas para verificar que no se produzcan coincidencias por defecto:
- Disminuye el número de piezas para aumentar la probabilidad de detectar errores.
- Asegúrate de que no hay coincidencias automáticas al iniciar el nivel.
¡Por fin, cada detalle cuenta para hacer de nuestro juego una experiencia más pulida y profesional! Con paciencia y perfeccionismo, nuestros jugadores disfrutarán de un producto más equilibrado y desafiante. ¡Sigue así, que el éxito está a la vista!