Publicado en 11 de abril, 2016
Unity – LoadScene modo single VS Additive y ventana de loading
Unity para poder cargar un nuevo nivel o escena (SceneManager.LoadScene apartir de Unity 5.3 y Application.LoadLevel anteriormente). El cual existen dos maneras de hacerlo básicamente, lo que hare será explicar con un poco más de detalle cómo funcionan internamente y así poder sacarle un mayor provecho:
- Modo Single (Normal): Este modo es el básico, el cual al ser llamado carga todo el contenido de la nueva escena, después Unity analiza que Assets seguirán siendo utilizados en la nueva escena que ya estaban cargados y de ahí elimina todos los GameObject de la vieja escena y libera de memoria todos aquellos Assets que ya no serán utilizados.
- Modo Additive: Este modo carga todo lo de la nueva Escena y no elimina ningun GameObject de la vieja escena y por lo tanto tampoco libera nada de los Assets.
Con esto a lo que quiero llegar es para su uso en la creación de una ventana de loading. Una práctica famosa y sencilla de generar una ventana de Loading, es tener una escena que solo contiene la imagen de «Loading» y cada vez que vayamos a cambiar de escena es llamar esta escena y desde aquí llamar la verdadera escena que nosotros necesitamos, así lograr siempre mostrar una ventana bonita de loading. Sencillo y fácil de implementar, pero tiene una desventaja hacerlo de esta manera. el 99% de los tutoriales y implementación de este tipo usan el modo Single para cargar las escenas, bueno daré un ejemplo de la desventaja:
El jugador está en el «Nivel 1» y lo pasa, llamamos la escena de Loading que solo contiene la imagen de ‘Loading’, Unity LIBERA de memoria todos los Assets que ya no son necesarios (Excepto de los GameObject que aun estén por «DontDestroyOnLoad») y después llama cargar «Nivel 2» y tiene que cargar todos los Assets que usa este Nivel, el cual es muy probable que la mayoría son Assets que ya eran usados en el «Nivel 1». Aquí el problema es que estaremos generando un Loading más grande de lo que realmente se necesitaría.
Como solucionar el problema:
Sabiendo cómo funciona el loading, realmente la clave está en que cuando del «Nivel 1» carguemos la escena de «Loading» lo hagamos usando el modo Additive, de esta manera solo agregara y mostrara la escena de Loading en pantalla, pero Unity no liberara ningun Asset de memoria, entonces al cargar de manera Single al «Nivel 2», Unity solo tendrá que cargar los Assets que hacen faltan y solo liberara la memoria de los Assets que de verdad ya no serán utilizados.
Resultado: Bueno, esto dependerá de las escenas, Assets y dispositivo, pero eh logrado reducir hasta un 70% del tiempo de «Loading».
Hola, la idea está bien y te lo agradezco, como agradecimiento te voy ha hacer una critica constructiva, gracias a que tu web tiene unos rayajos negros y blanco y el texto es blanco fff sobre un fondo negro 000, ahora soy un 70% mas ciego, cambialo por que destroza la vista, y por cierto no pidas correo para que la gente te comente, no necesitas responder a todo el mundo….. (obviamente mi correo no es ese, asi que no necesito respuesta)
Muchas Gracias por la explicación me ha ayudado un montón