Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Alvaro95 en Diciembre 16, 2018, 10:49:41 PM

Título: "Reinicio de escenas"
Publicado por: Alvaro95 en Diciembre 16, 2018, 10:49:41 PM
Buenas a todos.
 
 
 
Vereis, tengo creado un menu creado a partir de un scene manager en el que tengo metidas 3 escenas, es decir, un menu en el que tengo tres modos de juego, tres escenas.
 
 
 
Cual es el problema, una vez que entro en una escena y regreso al menu, cuando vuelvo a entrar nuevamente en la escena todo sigue en movimiento tal como cuando me sali.
 
Lo que me interesaria es saber si se puede hacer que una vez que salga al menu y vuelva a entrar en la escena todo este como en el primer momento, que se reiniciria todo basicamente.
Título: "Reinicio de escenas"
Publicado por: francoe1 en Diciembre 17, 2018, 12:25:14 AM
SceneManager.UnloadSceneAsync
Título: "Reinicio de escenas"
Publicado por: Alvaro95 en Diciembre 28, 2018, 10:41:13 PM
Hola francoe1
 
 
 
Este es el script que estoy utilizando para cambiar de escenas, son solamente tres escenas.
 

 
Como se deberia instalar debidamente el SceneManager.UnloadSceneAsync  ?
 
Por que si lo cambio por el SceneManager.LoadScene, me da error.
Título: "Reinicio de escenas"
Publicado por: pioj en Diciembre 29, 2018, 01:47:38 PM
Consejo paralelo: Recoge en una variable los strings de índices de cada escena, no uses strings literales. Te basta con definir un Enum con las escenas que tengas para tu juego.
 
Es mucho más ordenado y efectivo.
Título: "Reinicio de escenas"
Publicado por: lightbug en Diciembre 29, 2018, 05:20:34 PM
Cita de: Alvaro95 date=1546033273Por que si lo cambio por el SceneManager.LoadScene, me da error.
   


Fijate las signatures del método:
 

public static AsyncOperation (https://docs.unity3d.com/ScriptReference/AsyncOperation.html) UnloadSceneAsync(int sceneBuildIndex);
 

public static AsyncOperation (https://docs.unity3d.com/ScriptReference/AsyncOperation.html) UnloadSceneAsync(string sceneName);
 

public static AsyncOperation (https://docs.unity3d.com/ScriptReference/AsyncOperation.html) UnloadSceneAsync(SceneManagement.Scene (https://docs.unity3d.com/ScriptReference/SceneManagement.Scene.html) scene);
 

 
 

Podrá ser que no devuelve un void(?), ahora retorna un asyncOperation, podrías hacer:
 


AsyncOperation async;
...
async = UnloadSceneAsync("Scene 1");


    
Título: "Reinicio de escenas"
Publicado por: juanma_teso en Diciembre 29, 2018, 06:00:22 PM
No tendrías que usar un Enumerator para usar un Yield?? Creo que así se hacen las funciones asíncronas no?
Título: "Reinicio de escenas"
Publicado por: lightbug en Diciembre 30, 2018, 04:56:05 AM
Cita de: juanma_teso date=1546102822No tendrías que usar un Enumerator para usar un Yield?? Creo que así se hacen las funciones asíncronas no?
   


me parece que no es necesario, por lo menos desde lo técnico no me suena, aunque no recuerdo la verdad, creo que es bastante usada la corrutina porque siempre está el típico:
 

AsyncOperation async = SceneManager.LoadSceneAsync("XXX");
while (!async.isDone)
yield return null;

 
entonces como una vez que cargás no hacés nada hacés el yield y te queda super cómodo esperar en la línea que sigue (además de que más eficiente que preguntar frame a frame).
 
PD: puse carga pero bueno, para cualquier async es igual