Corrutinas para pantalla Game Over sin interrupciones
Clase 25 de 31 • Curso de Desarrollo de Videojuegos para Móviles con Unity
Contenido del curso
Sprite Atlas y Generación de Caramelos
- 5

Sprite Editor y cámaras en Unity para móviles
11:53 min - 6

Sprites múltiples en Unity con slice automático
12:06 min - 7

Script base de Candy en Unity C#
10:57 min - 8

Configuración y Gestión del Tablero en Unity con C#
10:08 min - 9

Inicializar tablero 2D con bucles anidados
10:27 min - 10

Configuración de slice por tamaño en Unity
05:22 min - 11

Creación y Configuración de Tablero en Unity para Videojuegos
08:22 min - 12

Sprites aleatorios de prefabs en Unity
07:18 min
Diseño de Game Play
- 13

Arreglar bug de tripletes en tablero Candy Crush
12:33 min - 14

OnMouseDown para seleccionar caramelos
12:14 min - 15

Swap de caramelos sin mover GameObject
10:17 min - 16

Configuración de Física en Unity para Movimiento de Caramelos
13:30 min - 17

Detección y Eliminación de Coincidencias en Candy Crush
12:06 min - 18

Anular sprites en lugar de destruir objetos
15:26 min - 19

Caída en cascada para match-3 con corrutinas
13:23 min - 20

Generar caramelos sin crear matches accidentales
09:09 min - 21

Último bug visual: rebotes y recálculos
10:55 min
Retos finales
- 22

Diseño de Interfaz Gráfica en Unity para Videojuegos
11:20 min - 23

Variables autocomputadas en Unity GUI Manager
07:31 min - 24

Implementación de Singleton en Gestor de Interfaz de Usuario
08:13 min - 25

Corrutinas para pantalla Game Over sin interrupciones
Viendo ahora - 26

Multiplica puntuación con combos inteligentes
04:46 min - 27

Integra tres audios en tu videojuego de caramelos
01:47 min - 28

Animación y Destrucción de Caramelos en Videojuegos
02:00 min - 29

Menú principal para tu videojuego móvil
03:28 min
Cierre del curso
Aprende a implementar una pantalla de game over en Unity con C#: dispara el final cuando el contador de movimientos llega a cero, usa una coroutine para respetar las animaciones finales y diseña una escena informativa con puntuación y opciones de reinicio. Así garantizas una experiencia pulida y sin cortes bruscos.
¿Cómo y cuándo activar la pantalla de game over?
La condición clave es el contador de movimientos. Cuando llegue a cero, el sistema debe activar el game over desde el setter del contador en el gestor de la interfaz (GUI manager). Asegura robustez usando la comparación menor o igual que cero para evitar negativos.
- Comprobación segura: if (moveCounter <= 0).
- Normalización del estado: asignar moveCounter = 0.
- Evitar Update vacío: elimina métodos no usados para mantener el código limpio.
- Invocación diferida: en lugar de llamar directo, arrancar una coroutine para la transición.
¿Cómo escribir el código en C#?
// Dentro del GUI Manager o clase que gestiona el contador
private int moveCounter;
public int MoveCounter
{
get => moveCounter;
set
{
moveCounter = value;
if (moveCounter <= 0)
{
moveCounter = 0;
StartCoroutine(GameOver()); // Arranca la corrutina.
}
}
}
// Corrutina de transición a Game Over
private IEnumerator GameOver()
{
// Espera a que termine la caída/repintado de piezas
yield return new WaitUntil(() => !BoardManager.SharedInstance.IsShifting);
// Margen para que el jugador vea el resultado final del último movimiento
yield return new WaitForSeconds(0.25f);
// TODO: invocar la pantalla/escena de Game Over.
}
¿Por qué usar una coroutine para la transición?
Llamar a game over inmediatamente tras el último movimiento es frustrante: el jugador no alcanza a ver su jugada final ni el incremento de puntos. Con una coroutine controlas el timing y respetas las animaciones.
- Variable de sincronización: BoardManager.SharedInstance.IsShifting.
- Momento exacto: esperar a que IsShifting sea false usando una expresión lambda.
- Pausa breve: añadir WaitForSeconds(0.25f) como regalo visual.
- Beneficio UX: el usuario aprecia el colofón del nivel sin cortes.
¿Cómo sincronizar con el tablero usando WaitUntil?
La clave es usar WaitUntil con una condición legible y precisa.
// Espera hasta que el tablero deje de "moverse"
yield return new WaitUntil(() => !BoardManager.SharedInstance.IsShifting);
// Pequeño margen para ver puntuación y estado final
yield return new WaitForSeconds(0.25f);
Puntos a dominar: - Expresión lambda: () => !BoardManager.SharedInstance.IsShifting. - Estado del tablero: IsShifting en true durante la caída; false al finalizar. - Transición ordenada: primero sincronizas, luego concedes el margen, y finalmente navegas a game over.
¿Qué debe incluir la escena de game over?
Crea una escena dedicada con elementos claros y accionables. Muestra resultados y ofrece opciones rápidas al jugador para seguir o salir.
- Información principal: puntuación actual de la partida.
- Métrica persistente: puntuación máxima global usando PlayerPrefs (valores enteros) para guardado en disco, también en móvil.
- Controles esenciales: botón para volver a jugar y botón para ir al menú principal.
- Diseño funcional: jerarquía visual, textos legibles y botones accesibles.
Sugerencias prácticas: - Inicializa la puntuación máxima a cero y actualízala si la actual la supera. - Estructura la UI con un área para el marcador y otra para acciones. - Mantén la navegación coherente: reiniciar nivel o regresar al menú original.
¿Te animas a crear tu propia pantalla de game over y compartirla? Cuéntame en comentarios cómo resolviste la sincronización con IsShifting y la gestión de la puntuación con PlayerPrefs.