Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

"Reinicio de escenas"

Iniciado por Alvaro95, Diciembre 16, 2018, 10:49:41 PM

Tema anterior - Siguiente tema
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.


Diciembre 28, 2018, 10:41:13 PM #2 Ultima modificación: Diciembre 28, 2018, 10:41:32 PM por Alvaro95
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.

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.

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 UnloadSceneAsync(int sceneBuildIndex);
 

public static AsyncOperation UnloadSceneAsync(string sceneName);
 

public static AsyncOperation UnloadSceneAsync(SceneManagement.Scene scene);
 

 
 

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


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


    

No tendrías que usar un Enumerator para usar un Yield?? Creo que así se hacen las funciones asíncronas no?

Diciembre 30, 2018, 04:56:05 AM #6 Ultima modificación: Diciembre 30, 2018, 05:00:45 AM por lightbug
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

Etiquetas: