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 contadorprivateint moveCounter;publicint MoveCounter
{get=> moveCounter;set{ moveCounter =value;if(moveCounter <=0){ moveCounter =0;StartCoroutine(GameOver());// Arranca la corrutina.}}}// Corrutina de transición a Game OverprivateIEnumeratorGameOver(){// Espera a que termine la caída/repintado de piezasyieldreturnnewWaitUntil(()=>!BoardManager.SharedInstance.IsShifting);// Margen para que el jugador vea el resultado final del último movimientoyieldreturnnewWaitForSeconds(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"yieldreturnnewWaitUntil(()=>!BoardManager.SharedInstance.IsShifting);// Pequeño margen para ver puntuación y estado finalyieldreturnnewWaitForSeconds(0.25f);
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.
Corrutinas para pantalla Game Over sin interrupciones
Hola Efra, llegue un poco tarde pero se sugiere usar una escena nueva por que es mucho más fácil separar la lógica por escenas. Pero no hay una respuesta cierta es simple cuestión de que quieres transmitir con tu juego (continuidad o espacio) yo normalmente uso escenas. Espero que sigas haciendo juegos un abrazo crack!