Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: raulprofe en Diciembre 12, 2017, 07:48:43 PM

Título: Pantalla blanca mientras se carga el juego
Publicado por: raulprofe en Diciembre 12, 2017, 07:48:43 PM
Hola. 
 
Utilizo Personal Edition.
 
Ejecutando el juego, tras la pantalla de "made with Unity", aparece una pantalla blanca que puede durar muchos segundos mientras se carga el juego. Despista un poco porque si el ordenador es lento puede durar bastante.
 
¿Se puede poner en la pantalla blanca simplemente algo del tipo "cargando...", o es necesario tener una edición profesional de Unity?
 
 
Título: Pantalla blanca mientras se carga el juego
Publicado por: lightbug en Diciembre 12, 2017, 09:01:28 PM
Hola, se puede pero lo vas a tener que implementar vos, o por lo menos no conozco ninguna opción que realice lo que pedís de forma automática. Hacerlo es bastante sencillo, tenes que cargar la escena "pesada" de forma asíncrona, haciendo esto lo que hacés es cargar la escena en memoria pero no aparece en pantalla hasta que le des el ok mediante el "done", podés verificarlo vos o ponerle que cuando se carga pase directamente. Aca la Doc:
 
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html (https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html)
 
 
 
Osea que ahora en vez de arrancar directamente la escena pesada, arrancás la escena de carga y hacés lo de arriba (revisá el link), mientras tanto podés hacer lo que quieras en la escena de carga, seguir el progreso de carga con una barra, animar un sprite , dejar todo estático, etc
Título: Pantalla blanca mientras se carga el juego
Publicado por: raulprofe en Diciembre 13, 2017, 06:58:39 PM
Cita de: lightbug date=1513108888Hola, se puede pero lo vas a tener que implementar vos, o por lo menos no conozco ninguna opción que realice lo que pedís de forma automática. Hacerlo es bastante sencillo, tenes que cargar la escena "pesada" de forma asíncrona, haciendo esto lo que hacés es cargar la escena en memoria pero no aparece en pantalla hasta que le des el ok mediante el "done", podés verificarlo vos o ponerle que cuando se carga pase directamente. Aca la Doc:
   
   
      https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html (https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html)
   
   
       
   
   
      Osea que ahora en vez de arrancar directamente la escena pesada, arrancás la escena de carga y hacés lo de arriba (revisá el link), mientras tanto podés hacer lo que quieras en la escena de carga, seguir el progreso de carga con una barra, animar un sprite , dejar todo estático, etc
   


¡¡Gracias!! Funcionó. 
 
Puse una escena de "Cargando" con un cubo rotando. Le metí al cubo este script: 
 
 
 

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class scriptPrecargando : MonoBehaviour {
 
void Start () {
   StartCoroutine(LoadYourAsyncScene());
}
void Update(){
   //Rota un cubo al que pertenece este script para distraer mientras se carga la siguiente escena
   transform.Rotate(Vector3.up, 50 * Time.deltaTime);
}
 
IEnumerator LoadYourAsyncScene()
{
   // The Application loads the Scene in the background at the same time as the current Scene.
   //This is particularly good for creating loading screens. You could also load the Scene by build //number.
   AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("Juego1Inicial");
   //Wait until the last operation fully loads to return anything
   while (!asyncLoad.isDone)
   {
      yield return null;
   }
}
}