Jump to content
UnitySpain
Yuli Bonilla

Problema corrutinas entre escenas ¿Posible?

Recommended Posts

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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?

Edited by pioj
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites
2 hours ago, Yuli Bonilla said:

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:

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

Share this post


Link to post
Share on other sites

×
×
  • Create New...