Terminando el juego

Clase 33 de 34Curso de Desarrollo de Videojuegos Móviles con Unity

Resumen

Cerrar el ciclo completo de un juego móvil es uno de los momentos más satisfactorios del desarrollo. Aquí se aborda cómo crear una pantalla de inicio, conectarla con el game manager y garantizar que el jugador pueda iniciar, perder y volver al menú principal sin problemas. Todo esto dentro de Unity, reutilizando elementos ya existentes y escribiendo scripts mínimos pero efectivos.

¿Cómo preparar el game manager para la pantalla de inicio?

Antes de construir cualquier interfaz, es necesario ajustar el estado inicial del game manager. Por defecto, el estado era in game, lo que provocaba que al dar play se iniciara el contador y se generaran las piezas de inmediato. El cambio consiste en establecer el estado predeterminado como idle [0:16]. De esta forma, al ejecutar el proyecto, el juego permanece en reposo esperando la acción del jugador.

Este concepto de estados del juego (game states) es fundamental: idle, in game y game over representan las tres fases del ciclo. Controlar en qué estado se encuentra el juego determina qué pantallas se muestran y qué lógica se ejecuta.

¿Cómo crear la pantalla de inicio reutilizando la UI de game over?

Una práctica eficiente es duplicar elementos existentes en lugar de crearlos desde cero. La pantalla de game over ya tiene la estructura necesaria: un contenedor, un título y botones [0:36].

  • Duplicar la UI de game over con Ctrl+D (o Cmd+D en Mac).
  • Renombrar el duplicado como UI Start Screen.
  • Cambiar el color de fondo a blanco.
  • Establecer la opacidad del contenedor al 100%.
  • Reemplazar el título "Game Over" por el nombre del juego, por ejemplo "Safari Match" [0:55].
  • Eliminar el texto de puntos, ya que no se necesita en la pantalla de inicio.
  • Conservar un solo botón y renombrarlo a BTN Start Game con el texto "Start" [1:20].
  • Cambiar el color del título a uno más amigable, como azul.

Por último, en el componente UI Screen, se modifica el visible state de game over a idle [1:32]. Así, la pantalla de inicio solo aparece cuando el juego está en reposo.

¿Qué lógica necesitan los scripts para cerrar el gameplay loop?

Se requieren dos piezas de código: un script para la pantalla de inicio y funciones adicionales en el game manager.

¿Cómo funciona el script UI Start Screen?

El script UI Start Screen es muy sencillo [1:55]. Contiene una única función pública:

csharp public void StartBtnClicked() { GameManager.instance.StartGame(); }

Esta función se conecta al evento OnClick del botón de inicio desde el inspector de Unity [3:22].

¿Qué hacen las funciones StartGame y ExitGame en el game manager?

Dentro del game manager se implementan dos funciones clave [2:10]:

csharp public void StartGame() { gameState = GameState.InGame; onGameStateUpdated?.Invoke(gameState); currentTimeToMatch = 0; points = 0; }

La función StartGame cambia el estado a in game, invoca el evento onGameStateUpdated con el operador ? para evitar errores si no hay suscriptores, y reinicia tanto el temporizador como los puntos.

La función ExitGame realiza el proceso inverso [2:52]:

csharp public void ExitGame() { gameState = GameState.Idle; points = 0; onGameStateUpdated?.Invoke(gameState); }

Aunque la lógica de StartGame y RestartGame es casi idéntica en un juego sencillo, es recomendable mantenerlas separadas [2:35]. En proyectos más complejos, el inicio puede incluir configuraciones que no se repiten al reiniciar.

¿Cómo se valida que el loop funciona correctamente?

Al probar, un error inicial provocaba que el juego terminara de inmediato: el valor de currentTimeToMatch se establecía en nueve en lugar de cero [3:42]. Corregido ese detalle, el flujo completo opera sin problemas [3:55]:

  • La pantalla de inicio aparece al ejecutar.
  • Al presionar start, comienza la partida.
  • El jugador puede hacer matches y acumular puntos con combos.
  • Al perder, aparece la pantalla de game over con el puntaje.
  • Al presionar exit game, se regresa a la pantalla de inicio.

El gameplay loop queda cerrado: inicio, juego, derrota y vuelta al menú. Con esto se tiene un juego móvil completo. ¿Qué parte del ciclo te resultó más interesante de implementar? Comparte tu experiencia en los comentarios.