CAPÍTULO 1 CONFIGURAR LOS GAME STATES
Un ‘GameManager’ en Unity se considera un script un poco especial, sería como el script que se considera el principal. Como su nombre indica, que controla todo el juego.
Es un objeto que lo sabe todo y todo el mundo sabe de él y tiene que estar puesto en todos los scripts. Es muy útil para el seguimiento del estado del juego. Con esto nos referimos que el juego puede tener muchisimos estados como el estado jugando, el estado cargando, el estado pausado, el estado mostrando díalogos, el estado mostrando cinemáticas. Mantener un seguimiento de estos estados puede ayudar a activar y desactivar objetos o comportamientos en determinados momentos. Por ejemplo ahora mismo tal y como lo tenemos configurado el personaje no debería poder moverse en estado pausado pero lo hace así que vamos a arreglar esto
Vamos a ver como funciona esta nueva forma de controlar los estados de nuestro juego para ello nos iremos dentro de la carpeta Scripts>Utils y veremos si tenemos añadidos el GameStateCharge y el GameStateListener dentro de esta carpeta
Y luego desde la carpeta de Scripts>ScriptableObjects
Debemos tener el GameStateSO y el GameManagerSO
Si abrimos el GameStateSO es basicamente no es nada, es un nombre.
Y en la parte del menú create le estamos diciendo que cuando creemos desde unity un nuevo archivo de este tipo que lo almacene dentro de ScriptableObjects>Game State
Ahora si abrimos el GameManagerSO nos encontraremos con este código
El asset que va a contener el estado actual del juego es un poquito más complejo
Basicamente tiene una variable llamada currentState que es digamos el estado actual
Va a estar avisando a través de un canal de que el estado ha cambiado, el canal será el Broadcasting Events
Tenemos aquí el previousState que lo guardaremos en privado de ahí que sea private. Nos interesa para que cuando el estado cambie. Por ejemplo cuando pasemos del pausa a playing que se muestre ese cambio con respecto a cada estado
Luego tenemos dos métodos publicos uno es el SetGameState. Dónde la primera línea de código nos dice que guarde el previousState si había alguno anteriormente.
Despues comprueba que el estado actual sea el gameState. Y luego si el evento no está nulo, es decir avisa a todo el mundo a través del Raise del nuevo gameState que tenemos ahora mismo
Y por último tenemos otro método publico llamado RestorePreviousState que lo que hace es coger el antiguo state, él que hemos guardado previamente
Ahora vamos a ver el código que hay en el GameStateChanger
Es un Monobehaviour esto quiere decir que lo podemos arrastrar a cualquier objeto
La dependencia es el gameManager. Y desde fuera podemos decirle al SetGameState que añada el estado que nosotros le digamos al script desde la ventana del inspector.
Y por otro lado el método RestorePreviousState lo que hace es llamar al gameState desde un objeto que esté en la escena.
Y el listener es un poquito más complejo pero sirve para ayudarnos a configurar ciertos estados de una manera más rápida. Se ha puesto como listener al GameStateChanged que es el canal de eventos para escuchar el cambio de estado.
Y después lo que hace es ir a la lista de componentes y ver si el nuevo GameState está activado o desactivado.
Y también invocar las acciones que marcaremos en los campos que aparecerán dentro de nuestro objeto desde la ventana Inspector
Ahora nos venimos a la carpeta de ScriptableObjects y creamos una nueva carpeta que llamaremos GameManager
Dentro de esta carpeta pulsaremos al botón derecho del ratón y elegimos la opción de Create>ScriptableObject>GameManager
Vamos a dejarlo tal como se ve:
Crearemos varios estados, para ello repetimos el proceso de crear ScriptableObject pero ahora elegiremos la opción de Game State
Dejaremos estos en total como Game State con los siguientes nombres:
Ahora seleccionaremos el GameManager y lo abriremos desde la ventana del inspector