Noticias

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

Problema corrutinas entre escenas ¿Posible?

Iniciado por Yuli Bonilla, Mayo 29, 2018, 05:13:37 AM

Tema anterior - Siguiente tema
Hola, en estos momentos me encuentro desarrollando un videojuego que necesita tener bastantes cronómetros, los cronómetros los realicé con corrutinas ya que necesitaba que existiera más de un cronometro funcionando, sin embargo necesito que estos cronómetros sigan funcionando así el jugador decida cambiar de escena.
 
Soy nueva con Unity, entonces todavía no conozco muchas herramientas, sin embargo leí sobre el DontDestryOnLoad(), pero según entiendo esto solo funciona con objetos físicos, no con métodos y efectivamente, haciendo una prueba esta función no sirve para lo que necesito.
 
Existe alguna otra forma de mantener mis corrutinas entre las escenas? o por el contrario hay otra forma de hacerlo?
 
Muchas gracias de antemano.

Utiliza esa funcion dentro del script que controla estos cronometros (pon el script dentro de objeto vacio), y esté no se destruira al cargar una scena.

Mayo 29, 2018, 07:43:00 PM #2 Ultima modificación: Mayo 30, 2018, 02:59:37 PM por pioj
Disculpa, no entiendo como dices que lo haga, ya he intentado pero no he podido hacer que continúe el conteo. 
 
Tengo algo así:
 
2 scripts, en el primero yo llamo la corrutina para iniciar el cronómetro: 
 

   public void Start(){
        cronometro Cronometro = cronos.GetComponent<cronometro>();
        StartCoroutine (Cronometro.contadorDia());
    }
En el segundo script tengo el cronómetro:
    public IEnumerator contadorDia(){
        int dia = 0;
        print ("Empieza el contador");
        while (dia <= 24) {
            dia++;
            textDia.text = dia.ToString();
            print ("Día" + dia);
            yield return new WaitForSeconds (1f);
        }
        print ("Han terminado los días, gracias por jugar");
    }
 
Ese es uno de los contadores que tengo, sin embargo he colocado la función DontDestroyOnLoad() en el primer script dentro de la función strart() como este:
    public void Start(){
        cronometro Cronometro = cronos.GetComponent<cronometro>();
        DontDestroyOnLoad(Cronometro);
        StartCoroutine (Cronometro.contadorDia());
    }

 
 
 
Pero de esta manera no funciona, que estoy entendiendo mal?

Cita de: Yuli Bonilla date=1527615780Ese es uno de los contadores que tengo, sin embargo he colocado la función DontDestroyOnLoad() en el primer script dentro de la función strart() como este:
   


Es que estás pasando un componente y no el gameobject, necesario para que viva de escena en escena.
 
no importa de donde llamés a ese DDOL, es un método estático, y toma un Unity Object, el Unity Object puede ser cualquier cosa, un GameObject, un script(monobehaviour), etc
 
fijate, pag de monobehaviour:
 
https://docs.unity3d.com/ScriptReference/MonoBehaviour.html
 
andá clickeando arriba en la parte que dice "inherits from ...." y terminás en :
 
https://docs.unity3d.com/ScriptReference/Component.html
 
que dice inherits from Object, este Object no es el objeto de C# es el objeto de "UnityEngine", es decir vos podés pasar cualquier cosa a DDOL, pero lo que tenés que pasar es el gameObject no el componente solo, así que quien tenga la variable del contador, vamos a suponer el objeto "cronometroObj" en cualquier lugar o script llamas a :
 

DontDestroyOnLoad(cronometroObj);

 
y debería vivir
 
Saludos

creo que es lo que dice @lightbug ...deverias hacer dontDestroy en el gameObject...

Etiquetas: