#10 Cambiar de escenas en Unity. Método LoadScene de SceneManager

ACTUALIZACIÓN IMPORTANTE

Este artículo pertenece a una serie de vídeos antiguos, actualmente he creado una nueva solución que permite cargar cualquier escena pulsando un botón y solo se necesita escribir el nombre de la escena que se quiere cargar, además puedes reutilizar esta solución simplemente arrastrando el script a otro botón y cambiando el nombre de la escena que quieres cargar, permitiendo por ejemplo crear un menú de selección de escenas.

Dejo la nueva información a continuación y más adelante encontrarás el artículo antiguo.

Descarga la solución en mi página de ITCH.IO

Se trata de un paquete de Unity que puedes descargar e importar y su funcionamiento se describe en el vídeo aquí debajo, te permitirá fácilmente cargar escenas en Unity al pulsar botones.

El paquete es gratis pero tienes la opción de indicar un precio para colaborar con esta página.

En el siguiente vídeo muestro cómo cargar una escena por nombre al pulsar un botón

El paquete que te descargas más arriba funciona de forma muy similar a como se muestra en este vídeo.




EL ARTÍCULO ANTIGUO CONTINÚA AQUÍ DEBAJO

Introducción

Este es el último ejercicio de la Serie Fundamental de Unity, en este artículo vamos a ver cómo cambiar de escena en Unity en tiempo de ejecución.

Entender cómo cambiar de escena es importante porque nos permite separar el contenido de nuestro juego en partes, por ejemplo el menú principal por un lado y el juego en sí por otro. Otro ejemplo podría ser un pueblo con distintos edificios en los que se puede entrar, el pueblo puede estar construido en una escena y luego utilizar múltiples escenas para cada edificio, o utilizar una escena para todos los edificios y elegir el apropiado en el momento de cargar la escena.

Ir a la página principal del proyecto

Escenas en Unity

Cada escena en Unity contiene su propia jerarquía de GameObjects, dependiendo de nuestras necesidades podremos utilizarlas de distintas formas.

Algunos ejemplos simples de utilización de escenas son usar una escena para el menú y otra para el juego, cada escena es un nivel de nuestro juego, hacer todo en una única escena, etc.

En nuestros proyectos probablemente debamos hacer cambios de escena, es por eso que considero forma parte de una de las cosas fundamentales de Unity.



Estación LoadScene del GameDevLab

Para aprender a cambiar una escena en Unity vamos a utilizar la estación LoadScene del GameDevLab, la cual consiste en un pozo extraño con aspecto de desintegrar la materia y enviarla a través del espacio-tiempo.

Fig. 1: Vista frontal de la estación LoadScene.
Fig. 2: Interior del pozo de la estación LoadScene.
Fig. 3: Interior del pozo de la estación LoadScene.

En el fondo del pozo hay una cápsula (figura 4) que tiene asignado un Collider en modo trigger y un Script que que se encargará de detectar el personaje y enviar un mensaje al Script que tenemos que completar.

game object que llama a la funcion para cargar una escena en unity
Fig. 4: En el fondo hay una cápsula con Collider en modo trigger.

La estación completa está contenida en el GameObject “#10 LoadScene” de la jerarquía, este GameObject tiene asignado el Script “LoadScene” el cual es el Script que tenemos que completar en este ejercicio.

jerarquia de un proyecto en unity
Fig. 5: Jerarquía del proyecto.
componentes del gameobject, el script loadscene se usa para cargar una escena en unity
Fig. 6: Componentes de la estación LoadScene.

El Script para completar contiene un solo método público llamado “teleport”, este método será ejecutado por el Script de la cápsula cuando se detecte al personaje en el fondo del pozo.

Para aportar algunas ideas de los métodos en mi canal hay un video en el que hablo sobre métodos en programación y además hay un artículo en la sección de programación de esta página.

script en blanco para completar
Fig. 7: Script LoadScene para completar

Lo que vamos a hacer es cambiar la escena dentro del método “teleport”, para esto vamos a la carpeta escenas del pack de la serie fundamental y vemos que hay dos escenas (figura 8), una es el GameDevLab y la segunda escena es GameDevDimension, esta última es la que vamos a cargar utilizando su nombre.

dos escenas de un proyecto en unity
Fig. 8: Escenas del proyecto, GameDevLab y GameDevDimension.



Resolución

Para empezar tenemos que importar el namespace UnityEngine.SceneManagement

Fig. 9: Librerías importadas en la parte superior del Script.

Luego para cambiar la escena en Unity ejecutamos un método estático de la clase “SceneManager”, el método LoadScene, al cual le pasamos como parámetro un String con el nombre de la escena que queremos cargar.

Fig. 10: Método para cambiar de escena en Unity.

Con esa simple instrucción podemos hacer el cambio de escena, pero para que esto funcione todas las escenas tienen que estar añadidas a la compilación, esto lo hacemos en File > Build Settings, abriendo cada escena y haciendo clic en Add Open Scenes.

ventana de configuracion de la compilacion en unity
Fig. 11: Se agregan las escenas en Build Settings.

Cuando el personaje cae al pozo se carga una nueva escena en la cual la cámara avanza automáticamente y los controles están inhabilitados, cuando la cámara llega al final del túnel se vuelve a cargar automáticamente la escena del GameDevLab.

Fig. 12: Al entrar en el modo juego y caer en el pozo se carga la escena GameDevDimension.


Fig. 13: Vista del túnel de la escena GameDevDimension.

Fig. 14: Vista del túnel de la escena GameDevDimension.

Fig. 15: Vista del túnel de la escena GameDevDimension.



Conclusión

Para cambiar una escena en Unity necesitamos importar la librería SceneManagement de UnityEngine y utilizamos un método estático de la clase SceneManager.

Nos podemos referir a una escena por su nombre o por su código de identificación que aparece en Build Settings, en este caso utilizamos el nombre.

Cargar una nueva escena es una tarea relativamente simple, el problema es que la nueva escena está predefinida y comienza siempre desde cero.

Por ejemplo una escena puede ser una casa con diez monedas, el personaje entra, toma las monedas y sale de la casa, es decir vuelve a la escena anterior. Si no hacemos nada al respecto, al volver a entrar en la escena de la casa estarán nuevamente las diez monedas en el interior.

Para prevenir esto tenemos que almacenar información del estado de las variables en la escena y leer esta información al comienzo de la escena.

Scroll al inicio
Secured By miniOrange