4. UI y GameManager: El Estado Global del Juego 📊🖥️
Introducción a la Interfaz de Usuario (UI) en Unity
Para que un videojuego se sienta como tal, necesita comunicarse con el jugador. Esto se logra a través del HUD (Heads-Up Display) o Interfaz de Usuario en pantalla.
En Unity, toda interfaz visual requiere un objeto contenedor especial llamado Canvas (Lienzo).
- Haz clic derecho en la ventana Hierarchy y selecciona
UI -> Canvas. - Verás que se crea automáticamente el Canvas junto con un objeto llamado EventSystem (necesario para detectar clicks en botones).
- Haz clic derecho sobre el Canvas y crea tres textos seleccionando
UI -> Text - TextMeshPro:- Nombra al primero como
ScoreText(ubicado arriba a la izquierda). - Nombra al segundo como
TimerText(ubicado arriba a la derecha). - Nombra al tercero como
WinLoseText(ubicado al centro de la pantalla, con tamaño de fuente grande).
- Nombra al primero como
El Controlador Global: GameManager
El GameManager es un script centralizado encargado de controlar las reglas del juego: contar los puntos, llevar el reloj de tiempo y determinar si el jugador gana o pierde.
Para que cualquier script pueda acceder al GameManager de forma directa y limpia, utilizaremos el Patrón de Diseño Singleton.
- Crea un script llamado
GameManagery ábrelo en tu editor de código. - Reemplaza su contenido con el siguiente código:
Conectando los Componentes en el Editor
Para que el GameManager pueda actualizar los textos de la interfaz, debemos enlazar los objetos en el Inspector:
- Crea un GameObject vacío en tu jerarquía (clic derecho ->
Create Empty) y llámalo_GameManager. - Arrástrale el script
GameManager.csque acabas de programar. - Selecciona
_GameManager. Verás en el Inspector los campos vacíos de UI: Score Text, Timer Text y Win Lose Text. - Arrastra tus objetos correspondientes de la jerarquía (
ScoreText,TimerText, etc.) a cada uno de estos campos.
Enlazando el Jugador con el GameManager
Ahora debemos actualizar las funciones de interacción en el script PlayerController.cs para que le reporten los eventos a la instancia Singleton del GameManager:
Al hacer GameManager.Instance.CollectCoin(), estamos llamando directamente al método de la única copia del GameManager que existe en memoria, sumando un punto de forma inmediata y actualizando el texto en pantalla.
Ponte a prueba
Comprueba si has asimilado la lógica del flujo de datos entre el jugador, el GameManager y el Canvas de la interfaz gráfica.