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

ACTUALIZACIÓN IMPORTANTE

Este artícu­lo pertenece a una serie de vídeos antigu­os, actual­mente he crea­do una nue­va solu­ción que per­mite car­gar cualquier esce­na pul­san­do un botón y solo se nece­si­ta escribir el nom­bre de la esce­na que se quiere car­gar, además puedes reuti­lizar esta solu­ción sim­ple­mente arras­tran­do el script a otro botón y cam­bian­do el nom­bre de la esce­na que quieres car­gar, per­mi­tien­do por ejem­p­lo crear un menú de selec­ción de escenas. 

Dejo la nue­va infor­ma­ción a con­tin­uación y más ade­lante encon­trarás el artícu­lo antiguo.

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

Se tra­ta de un paque­te de Uni­ty que puedes descar­gar e impor­tar y su fun­cionamien­to se describe en el vídeo aquí deba­jo, te per­mi­tirá fácil­mente car­gar esce­nas en Uni­ty al pul­sar botones.

El paque­te es gratis pero puedes indicar un pre­cio si quieres apo­yar la creación de este contenido.

Te recomiendo que veas este vídeo en el que muestro cómo cargar una escena por nombre al pulsar un botón

El paque­te que te descar­gas más arri­ba fun­ciona de for­ma muy sim­i­lar a como se mues­tra en este vídeo.


EL ARTÍCULO ANTIGUO CONTINÚA AQUÍ DEBAJO

Introducción

Este es el últi­mo ejer­ci­cio de la Serie Fun­da­men­tal de Uni­ty, en este artícu­lo vamos a ver cómo cam­biar de esce­na en Uni­ty en tiem­po de ejecución.

Enten­der cómo cam­biar de esce­na es impor­tante porque nos per­mite sep­a­rar el con­tenido de nue­stro juego en partes, por ejem­p­lo el menú prin­ci­pal por un lado y el juego en sí por otro. Otro ejem­p­lo podría ser un pueblo con dis­tin­tos edi­fi­cios en los que se puede entrar, el pueblo puede estar con­stru­i­do en una esce­na y luego uti­lizar múlti­ples esce­nas para cada edi­fi­cio, o uti­lizar una esce­na para todos los edi­fi­cios y ele­gir el apropi­a­do en el momen­to de car­gar la escena.

Ir a la pági­na prin­ci­pal del proyecto

Escenas en Unity

Cada esce­na en Uni­ty con­tiene su propia jer­ar­quía de GameOb­jects, depen­di­en­do de nues­tras necesi­dades podremos uti­lizarlas de dis­tin­tas formas.

Algunos ejem­p­los sim­ples de uti­lización de esce­nas son usar una esce­na para el menú y otra para el juego, cada esce­na es un niv­el de nue­stro juego, hac­er todo en una úni­ca esce­na, etc.

En nue­stros proyec­tos prob­a­ble­mente debamos hac­er cam­bios de esce­na, es por eso que con­sidero for­ma parte de una de las cosas fun­da­men­tales de Unity.

Estación LoadScene del GameDevLab

Para apren­der a cam­biar una esce­na en Uni­ty vamos a uti­lizar la estación Load­Scene del GameDe­vLab, la cual con­siste en un pozo extraño con aspec­to de desin­te­grar la mate­ria y enviar­la a través del espacio-tiempo.

Fig. 1: Vista frontal de la estación LoadScene.
Fig. 2: Inte­ri­or del pozo de la estación Load­Scene.
Fig. 3: Inte­ri­or del pozo de la estación Load­Scene.

En el fon­do del pozo hay una cáp­su­la (figu­ra 4) que tiene asig­na­do un Col­lid­er en modo trig­ger y un Script que que se encar­gará de detec­tar el per­son­aje y enviar un men­saje al Script que ten­emos que completar.

game object que llama a la funcion para cargar una escena en unity
Fig. 4: En el fon­do hay una cáp­su­la con Col­lid­er en modo trigger.

La estación com­ple­ta está con­teni­da en el GameOb­ject "#10 Load­Scene" de la jer­ar­quía, este GameOb­ject tiene asig­na­do el Script "Load­Scene" el cual es el Script que ten­emos que com­ple­tar en este ejercicio.

jerarquia de un proyecto en unity
Fig. 5: Jer­ar­quía del proyecto.
componentes del gameobject, el script loadscene se usa para cargar una escena en unity
Fig. 6: Com­po­nentes de la estación LoadScene.

El Script para com­ple­tar con­tiene un solo méto­do públi­co lla­ma­do "tele­port", este méto­do será eje­cu­ta­do por el Script de la cáp­su­la cuan­do se detecte al per­son­aje en el fon­do del pozo.

Para apor­tar algu­nas ideas de los méto­dos en mi canal hay un video en el que hablo sobre méto­dos en pro­gra­mación y además hay un artícu­lo en la sec­ción de pro­gra­mación de esta pági­na.

script en blanco para completar
Fig. 7: Script Load­Scene para completar

Lo que vamos a hac­er es cam­biar la esce­na den­tro del méto­do "tele­port", para esto vamos a la car­pe­ta esce­nas del pack de la serie fun­da­men­tal y vemos que hay dos esce­nas (figu­ra 8), una es el GameDe­vLab y la segun­da esce­na es GameDe­vDi­men­sion, esta últi­ma es la que vamos a car­gar uti­lizan­do su nombre.

dos escenas de un proyecto en unity
Fig. 8: Esce­nas del proyec­to, GameDe­vLab y GameDevDimension.

Resolución

Para empezar ten­emos que impor­tar el name­space UnityEngine.SceneManagement

Fig. 9: Libr­erías impor­tadas en la parte supe­ri­or del Script.

Luego para cam­biar la esce­na en Uni­ty eje­cu­ta­mos un méto­do estáti­co de la clase "Scene­M­an­ag­er", el méto­do Load­Scene, al cual le pasamos como parámetro un String con el nom­bre de la esce­na que quer­e­mos cargar.

Fig. 10: Méto­do para cam­biar de esce­na en Uni­ty.

Con esa sim­ple instruc­ción podemos hac­er el cam­bio de esce­na, pero para que esto fun­cione todas las esce­nas tienen que estar aña­di­das a la com­pi­lación, esto lo hace­mos en File > Build Set­tings, abrien­do cada esce­na y hacien­do clic en Add Open Scenes.

ventana de configuracion de la compilacion en unity
Fig. 11: Se agre­gan las esce­nas en Build Settings.

Cuan­do el per­son­aje cae al pozo se car­ga una nue­va esce­na en la cual la cámara avan­za automáti­ca­mente y los con­troles están inhab­il­i­ta­dos, cuan­do la cámara lle­ga al final del túnel se vuelve a car­gar automáti­ca­mente la esce­na del GameDevLab.

Fig. 12: Al entrar en el modo juego y caer en el pozo se car­ga la esce­na GameDevDimension.


Fig. 13: Vista del túnel de la esce­na GameDevDimension.

Fig. 14: Vista del túnel de la esce­na GameDe­vDi­men­sion.

Fig. 15: Vista del túnel de la esce­na GameDe­vDi­men­sion.

Conclusión

Para cam­biar una esce­na en Uni­ty nece­si­ta­mos impor­tar la libr­ería Scene­M­an­age­ment de Uni­tyEngine y uti­lizamos un méto­do estáti­co de la clase SceneManager.

Nos podemos referir a una esce­na por su nom­bre o por su códi­go de iden­ti­fi­cación que aparece en Build Set­tings, en este caso uti­lizamos el nombre. 

Car­gar una nue­va esce­na es una tarea rel­a­ti­va­mente sim­ple, el prob­le­ma es que la nue­va esce­na está pre­defini­da y comien­za siem­pre des­de cero. 

Por ejem­p­lo una esce­na puede ser una casa con diez mon­edas, el per­son­aje entra, toma las mon­edas y sale de la casa, es decir vuelve a la esce­na ante­ri­or. Si no hace­mos nada al respec­to, al volver a entrar en la esce­na de la casa estarán nue­va­mente las diez mon­edas en el interior. 

Para pre­venir esto ten­emos que alma­ce­nar infor­ma­ción del esta­do de las vari­ables en la esce­na y leer esta infor­ma­ción al comien­zo de la escena.

Scroll al inicio
Secured By miniOrange