jairogarcíarincón

Receta 1: Gestión de escenas


50.0K

Introducción



Para comenzar el juego y desde el principio utilizar un GameManager que lo controle, crearemos diferentes escenas para cambiar entre ellas mediante botones, si bien la lógica sería similar en caso de tener cambiar de escena porque he completado un nivel o me he quedado sin vidas, por ejemplo. Puedes comprobar el objetivo final haciendo clic AQUÍ.

Planteamiento de assets



Una vez creado el proyecto en 3D vacío y ajustada la visualización de la vista de Game a FullHD (1920x1080), para poder gestionar las escenas de un juego, inicialmente vamos a necesitar crear diferentes assets, a saber:

  1. Un script llamado GameManager
  2. Una escena llamada Preload que se ejecutará la primera al arrancar el juego.
  3. Una escena de inicio llamada Inicio que nos dará acceso a las diferentes opciones del juego (Juego, Opciones y Salir).
  4. Una escena de juego llamada Juego.
  5. Una escena de opciones llamada Opciones.
  6. Una escena de fin llamada Créditos, a la que se accede al acabar el juego.

De momento, crea las escenas Preload e Inicio dentro de Assets en una nueva carpeta llamada Scenes, y el script GameManager en una nueva carpeta llamada Scripts.

La escena Preload y el Game Manager

Por defecto, la versión actual de Unity no tiene un objeto gestor de escenas, si no que cualquier objeto creado se destruye al cambiar de escena.

Es por ello que debemos crear una escena vacía que se ejecute al arrancar y que contenga un objeto que no se destruya durante todo el ciclo de vida del juego. La escena vacía es la que se suele denominar Preload y será la primera al hacer el Build.

Además, a esta escena le añadiremos un Empty object al que llamaremos GameManager y le asociaremos nuestro script GameManager con el siguiente código:



Escena Preload


De este modo, nos hemos asegurado durante todo el juego la existencia de un objeto con un script asociado que nos permitirá controlar los cambios entre las diferentes escenas.

Para terminar, haz clic en File > Build Settings y asegúrate de que la escena Preload está añadida. De lo contrario, ha clic en Add Open Scenes y comprueba que se añade:

Build Settings


La escena de Inicio



Para la escena de Inicio, que se debería haber cargado automáticamente al arrancar el juego, vamos a añadir un Canvas con los siguientes elementos:

  • Una imagen de fondo llamada Imagen Fondo (UI > RawImage) de color verde con pivot y position stretch (Anchor Presets > Alt + Shift + clic en el cuadro inferior derecho)
  • Un texto llamado Texto Escena (UI > Text) de color blanco con pivot y position center (Anchor Presets > Alt + Shift + clic en el cuadro central) y Pos Y 40 para que quede por encima del centro.
  • Un botón con el texto Juego llamado Boton Juego (UI > Button) de color naranja.
  • Un botón con el texto Opciones llamado Boton Opciones (UI > Button) de color amarillo.
  • Un botón con el texto Créditos llamado Boton Creditos (UI > Button) de color azul.
  • Un botón con el texto Salir llamado Boton Salir (UI > Button) de color rojo.

Tendrás que modificar las posición en X e Y de los botones y utilizar un ancho y alto adecuados, así como modificar el tipo y tamaño de letra si lo deseas. El resultado podría ser similar al siguiente:

Escena Inicio


Para terminar, haz clic en File > Build Settings y añade la escena Inicio al Build mediante Add Open Scenes.

La escena de Juego



Para crear la escena de Juego, duplica la anterior (Ctrl+D o Cmd+D), renómbrala como Juego y realiza los siguientes cambios:

  • Cambia el color de Imagen Fondo a naranja.
  • Cambia el texto de Texto Escena a Escena de Juego.
  • Cambia el nombre de Boton Juego a Botón Inicio, su texto a Inicio y su color a verde.

El resultado podría ser similar al siguiente:

Escena Juego


Para terminar, haz clic en File > Build Settings y añade la escena Juego al Build mediante Add Open Scenes.

La escena de Opciones



Para crear la escena de Opciones, duplica la anterior (Ctrl+D o Cmd+D), renómbrala como Opciones y realiza los siguientes cambios:

  • Cambia el color de Imagen Fondo a amarillo.
  • Cambia el texto de Texto Escena a Escena de Opciones.
  • Cambia el nombre de Boton Opciones a Botón Juego, su texto a Juego y su color a naranja.

El resultado podría ser similar al siguiente:

Escena Opciones


Para terminar, haz clic en File > Build Settings y añade la escena Opciones al Build mediante Add Open Scenes.

La escena de Créditos



Para crear la escena de Creditos, duplica la anterior (Ctrl+D o Cmd+D), renómbrala como Creditos y realiza los siguientes cambios:

  • Cambia el color de Imagen Fondo a azul.
  • Cambia el texto de Texto Escena a Escena de Créditos.
  • Cambia el nombre de Boton Creditos a Botón Opciones, su texto a Opciones y su color a amarillo.

El resultado podría ser similar al siguiente:

Escena Créditos


Para terminar, haz clic en File > Build Settings y añade la escena Creditos al Build mediante Add Open Scenes. El orden de escenas debería ser el siguiente (si no es así, corrígelo arrastrando cada una a su lugar correspondiente):

Orden de escenas


Las acciones de los Botones



Lo único que faltaría por hacer para terminar la receta es programar las acciones de los botones, esto es, que al hacer el clic en ellos el juego cambie a la escena correspondiente.

Para ello, vamos a crear un nuevo script llamado Botones con el siguiente código:



Como ves, hemos creado acciones en todos los botones que se ejecutarán desde el GameManager al hacer clic en los botones, salvo en el caso del Botón Salir, que terminará el juego (cuando hagas el Build y lo pruebes en un ordenador, en mi versión HTML tampoco podrás comprobar su funcionamiento).

De este modo, cada vez que pulsamos un botón de cambio de escena, se ejecuta el método cambiarEscena del script GameManager para que realice el cambio.

Por último, debemos añadir el script Botones a todos los Canvas de todas las escenas con botones, así como asociar las variables de los botones con sus botones correspondientes.

Ten en cuenta que en cada escena hay 4 botones y 5 variables a asignar, de modo que una quedará vacía (la del botón propio de la escena). No hay problema, por eso en el script hemos utilizado una sentencia if para asegurarnos de que solo añada la acción si existe el botón correspondiente.

Una vez hecho esto, ya puedes probar tu gestor de escenas (lanzándolo siempre desde la escena Preload).

Con esto estaría terminada la receta, espero que te haya resultado útil.

Orden de escenas


Publicado el 21 de Noviembre de 2024

unity