Contenido del curso

Mecánica Principal

Terminando el juego

Resumen

Crear una pantalla de inicio en Unity es el paso final para cerrar el gameplay loop de un juego móvil tipo match. Aquí aprendes a configurar el estado inicial del Game Manager, duplicar pantallas de UI y conectar botones para iniciar, reiniciar y salir del juego sin romper la lógica.

¿Cómo configurar el estado inicial del Game Manager?

Antes de tocar la UI, el primer ajuste ocurre en el Game Manager. Hasta ahora el estado por defecto era in game, pero eso hace que al dar play el contador arranque solo y las piezas se generen sin control.

La solución es cambiar ese estado por defecto a idle [00:20]. Así, cuando presionas play en Unity, el juego espera. Nada se mueve hasta que el jugador decida empezar desde la pantalla de inicio.

¿Qué es el estado idle en un Game Manager? Es un estado de espera donde el juego está cargado pero no activo. No corre el contador, no se generan piezas y la lógica principal queda pausada hasta recibir una acción del jugador.

¿Cómo duplicar la UI de Game Over para crear la pantalla de inicio?

La pantalla de inicio comparte estructura con la de game over, así que duplicarla con Ctrl+D o Cmd+D ahorra trabajo. Al duplicado le pones un nombre claro, por ejemplo UI Start Screen.

Desde ahí aplicas estos cambios visuales y de contenido:

  • Cambiar el color de fondo a blanco.
  • Reemplazar el título Game Over por el nombre del juego, en este caso Safari Match.
  • Subir el contenedor a 100% de opacidad.
  • Eliminar los puntos, que no aplican antes de jugar.
  • Borrar uno de los dos botones y dejar solo el botón de inicio.
  • Renombrar ese botón a BTN Start Game con el texto Start.
  • Cambiar el color del título de rojo a un azul más amable.

Después de editar, desactivas momentáneamente la UI de game over mientras trabajas, pero recuerda reactivarla antes de probar.

¿Qué componentes necesita la nueva pantalla?

A la UI Start Screen le quitas el componente Game Over con remove component, porque hereda lógica que no le corresponde [01:55]. Luego, en su UI Screen Component, cambias el visible state de game over a idle. Con esto, la pantalla solo aparece cuando el juego está en estado idle.

¿Cómo conectar el botón Start con el Game Manager?

Si presionas Start en este punto, no pasa nada. Falta el script que conecta el botón con el flujo del juego. En la carpeta de scripts creas uno nuevo llamado UI Start Screen.

El script es directo. Solo necesita una función pública:

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

Esta función se ejecuta cuando el jugador toca el botón y le pide al Game Manager que arranque el juego mediante una nueva función llamada StartGame.

¿Para qué sirve GameManager.Instance? Es la referencia al singleton del Game Manager, un patrón que permite acceder al mismo objeto desde cualquier script sin crear copias. Así centralizas la lógica del juego en un solo lugar.

¿Qué lógica debe tener la función StartGame?

En el Game Manager ya existían RestartGame y ExitGame. Ahora agregas StartGame arriba con esta lógica:

  • Cambiar el gameState a GameState.InGame.
  • Invocar el evento onGameStateUpdated?.Invoke(gameState) para notificar al resto del sistema.
  • Reiniciar el currentTimeToMatch a cero.
  • Reiniciar los puntos a cero.

Esta función se parece mucho a RestartGame, y en un juego sencillo podrías reutilizarla. Pero la recomendación es mantener funciones separadas para iniciar y reiniciar, porque en juegos más complejos hay acciones que solo deben ocurrir al inicio, como cargar tutoriales o configuraciones iniciales.

¿Qué hace la función ExitGame?

Cuando el jugador sale del juego desde la pantalla de game over, ExitGame devuelve todo a su lugar [03:30]:

  • Cambia el gameState a GameState.Idle.
  • Reinicia los puntos.
  • Invoca onGameStateUpdated con el nuevo estado.

Esto cierra el ciclo y devuelve al jugador a la pantalla de inicio.

¿Cómo conectar el botón en Unity y probar el juego?

De vuelta en Unity, agregas el componente UI Start Screen al objeto correspondiente. En el botón Start Game, dentro de su On Click Event, arrastras la UI Start Screen y seleccionas la función StartBtnClicked.

Al probar puede aparecer un bug típico: el juego inicia y termina al instante. La causa es asignar currentTimeToMatch = 9 en lugar de cero dentro de StartGame [04:25]. Corriges el valor a cero, guardas y vuelves a probar.

Con el ajuste, el flujo queda completo:

  1. Aparece la pantalla de inicio con el título del juego.
  2. Presionas Start y comienza el gameplay con contador activo.
  3. Haces matches, sumas puntos y encadenas combos.
  4. Al perder, aparece la pantalla de game over con tu puntaje.
  5. Presionas Exit Game y regresas a la pantalla de inicio.

Ese ciclo es lo que se conoce como gameplay loop cerrado, el corazón de cualquier juego móvil funcional. Con pantalla de inicio, gameplay principal y pantalla de game over, tu Safari Match ya está terminado.

¿Cómo te sientes ahora que tienes un juego completo para teléfonos móviles? Cuéntame en los comentarios qué fue lo más retador de cerrar el loop.