Ahora abriremos el prefab de player y le añadiremos un componente llamado GameStateListener
Dentro de las opciones que nos da este script habilitaremos los siguientes componentes que vemos marcados:
Abrimos la escena de Gameplay y dentro de esta crearemos un nuevo objeto vacio que llamaremos UIManager
Y lo colocamos en la parte de arriba de nuestra Jerarquía
Le añadimos el componente de GameState Listener
Y lo configuramos tal y como hemos hecho antes:
Ahora añadimos otra dependencia y arrastramos UIManager dentro del None(Object)
Despues elegimos la Función GameObject>SetActive
Ahora crearemos otra dependencia dentro de las opciones de Actions y arrastraremos el prefab de SettingsMenu dentro del recuadro de None(Object)
Y seguidamente seleccionamos GameObject>SetActive en el apartado de Funciones
Dejando así las opciones dentro del On Main Menu State y así esté desactivado
Para no tener que ir haciendo esto uno por uno podemos reusar esta configuración dentro de otros elementos o acciones. Para ello nos ponemos encima de OnMainMenuState y presionamos el botón derecho del ratón y elegimos la opción de Copy
Y ahora lo pegamos en el siguiente On Loading State repitiendo el mismo proceso
Y ahora lo pegamos en el siguiente On Playing State repitiendo el mismo proceso. Dejamos activado el HUD marcando la casilla de debajo de GameObject.SetActiveJuego
Por ultimo pegaremos esta configuración en el apartado que pone OnPauseState y dejaremos activada la casilla del PauseMenu
Guardamos los cambios
El GameManager
en Unity es a menudo un componente crucial que gestiona aspectos globales del juego, como la puntuación, el estado del juego, la gestión de niveles, y más:
1. Crear un objeto vacío para el GameManager:
1.1. En el Editor de Unity:
- Crea un objeto vacío llamado «GameManager» en tu escena.
2. Crear el script GameManager:
2.1. Crea un nuevo script llamado «GameManager»:
- Haz clic con el botón derecho en el Assets -> Create -> C# Script.
- Nombre del script:
GameManager
.
2.2. Abre el script en tu editor de código preferido:
- Define variables globales para gestionar el estado del juego, la puntuación, el tiempo, etc.
using UnityEngine; public class GameManager : MonoBehaviour { public static GameManager instance; // Variables de juego public int playerScore = 0; public bool isGameOver = false; private void Awake() { // Implementa el patrón Singleton para asegurar una única instancia del GameManager if (instance == null) { instance = this; } else { Destroy(gameObject); } } void Start() { // Inicializa cualquier configuración inicial del juego // Puedes cargar niveles, establecer valores predeterminados, etc. } void Update(){ // Aquí puedes verificar condiciones para el final del juego, actualizar puntuaciones, etc. if (isGameOver) { // Lógica para el final del juego } } // Otros métodos útilespublic void IncreaseScore(int amount) { // Método para aumentar la puntuación del jugadorplayerScore += amount; // Puedes añadir aquí lógica adicional, como actualizar la interfaz de usuario } public void GameOver() { // Método para llamar al final del juegoisGameOver = true; // Puedes realizar acciones adicionales, como mostrar un menú de fin de juego } }
3. Asignar el script al objeto GameManager:
3.1. Arrastra y suelta el script GameManager al objeto GameManager en tu escena.
4. Utilizar el GameManager desde otros scripts:
4.1. Accede al GameManager desde otros scripts:
- Puedes acceder a la instancia del GameManager desde cualquier otro script usando
GameManager.instance
.
// Ejemplo de cómo aumentar la puntuación desde otro scriptGameManager.instance.IncreaseScore(10);