Yuli Bonilla 0 Report post Posted May 29, 2018 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
GSG3D 150 Report post Posted May 29, 2018 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
Yuli Bonilla 0 Report post Posted May 29, 2018 (edited) 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 May 30, 2018 by pioj Por favor, usa el <> o el "quote" para pegar código. Share this post Link to post Share on other sites
lightbug 725 Report post Posted May 29, 2018 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
Igor 217 Report post Posted May 30, 2018 creo que es lo que dice @lightbug ...deverias hacer dontDestroy en el gameObject... Share this post Link to post Share on other sites