Rellenando las piezas
Clase 20 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 controlar el tiempo entre la creación de piezas?
Para lograr un flujo de generación de piezas más controlado, es fundamental declarar una nueva variable que defina el tiempo de espera entre la creación de cada pieza. En Unity, creamos una variable pública de tipo float llamada timeBetweenPieces con un valor predeterminado de 0.05 segundos. Al usar esta variable, garantizamos que las piezas no se generen todas de una vez, sino que hagan una pausa, creando un efecto animado más atractivo.
¿Cuál es el papel del IEnumerator en este proceso?
Cuando utilizamos IEnumerator en nuestra función setOfPieces, permitimos pausar la ejecución del código, usando yield return new WaitForSeconds(timeBetweenPieces);. Esto significa que cada vez que generamos una pieza, esperamos el tiempo especificado antes de generar la siguiente. Esto se suma a la mejora visual durante la jugabilidad.
public IEnumerator SetOfPieces()
{
yield return new WaitForSeconds(timeBetweenPieces);
// Código para crear las piezas
}
¿Cómo garantizamos que el espacio para crear una pieza esté libre?
Es primordial verificar que el espacio donde queremos colocar una nueva pieza esté desocupado. Para lograr esto, integramos una condición if que revisa si el espacio en las coordenadas actuales de nuestro tablero está nulo. Si es así, se procederá a crear una nueva pieza. Este método previene sobreescrituras innecesarias.
if (Pieces[x, y] == null)
{
// Código para crear una nueva pieza
}
Además, después de ejecutar todas las iteraciones necesarias, usamos yield return null; para asegurar que la corrutina se limpie de memoria una vez completada.
¿Cómo activar y desactivar corrutinas en Unity?
Las corrutinas deben iniciarse de manera adecuada para garantizar su correcta ejecución. En el método Start, llamamos a la función setOfPieces dentro de StartCoroutine, asegurando que se ejecute como una corrutina.
StartCoroutine(SetOfPieces());
¿Qué sucede cuando no hay coincidencias en el juego?
Cuando nuestras piezas se han alineado y no hay más coincidencias (o "matches"), debemos rellenar la cuadrícula. Esto se logra volviendo a llamar la corrutina setOfPieces. Antes de su ejecución, podemos añadir un retraso usando yield return new WaitForSeconds(0.5); para prever una experiencia fluida en la jugabilidad. Posteriormente, reducimos este tiempo a 0.1 segundos para mejorar la velocidad del juego.
¿Cómo manejamos la interacción del usuario durante las animaciones?
Es vital prevenir que el jugador realice nuevas acciones mientras se ejecutan animaciones de movimiento y relleno. Para ello, utilizamos la variable swappingPieces. Cuando comenzamos a mover las piezas, establecemos swappingPieces en true y permitimos inputs únicos al verificar si swappingPieces es false.
if (!swappingPieces)
{
// Código para manejo del input
}
Finalmente, una vez que todas las piezas nuevas están creadas y posicionadas adecuadamente, volvemos a establecer swappingPieces en false, permitiendo al usuario continuar interactuando. Esto no solo mejora la experiencia del usuario, sino que también previene errores potenciales en el juego.
Con estos avances, hemos conseguido implementar una mecánica más robusta y pulida para nuestro juego. A medida que avanzamos, estos fundamentos nos permitirán añadir mejores animaciones y funcionalidades, mejorando el aspecto visual y la experiencia global para los jugadores. ¡Sigue explorando y aprendiendo más sobre desarrollo de juegos para llevar tus proyectos al siguiente nivel!