Saludos,
Bueno tengo un problema con el StartCoroutine, sucede lo siguiente:Quiero que un objeto con un script que les mostrare luego. el Script lo que hace es generar un numero aleatorio entre dos numeros que se pasaran por el Inspector, luego en el Update() se invoca al StartCoroutine(miMetodo) y miMetodo lo que hace es contar el tiempo que se genero aleatoreamente y luegomostrar un mensage(el mensage es para provar antes de tirar el codigo que quiero) pero lo que hace es que en vez de hacer lo que yo pienso (esperar el tiempo generado aleatoreamente, luego mostrar el mensage, luego salir de miMetodo, regresar al Update()(si ya se que el Update se genera cada frame) y volver a llamar a miMetodo haciendo el procedimiento infinitamente) lo que hace es que, la primera vez que entra a miMetodo, SI espera el tiempo generado aleatoreamente(osea si se genero un 10, espera 10 segundos antes de tirar el primer mensage) pero despues que genera el primer mensage tiralos demas mensages corridos sin esperar los tiempos generados aleatoreamente no se si me entienden. aqui unas imagenes para que puedan ver algo: (//<fileStore.core_Attachment>/monthly_2015_09/Codigo.png.c2e944cfb91e27287330e23b5e66b202.png)Espero me puedan decir en que estoy fallando o mejor aun espero que hayan entendido mi problema, y me puedan ayudar.
Gracias de antemano.
No puedes/debes llamar a Coroutines en el Update. Puedes utilizar Invoke que permite una llamada cada x segundos fuera del update.Si quieres ser más preciso y utilizar el update, utiliza Time.deltaTime y cuando se hayan cumplido x segundos, lanzas la función sin ser coroutine.
En realidad el script funciona perfectamente :/Las corrutines crean un hilo a parte, a si que nunca van a detener tu función update, simplemente van a funcionar paralelamente, por esto mismo tienes esos resultados, porque cada vez que entrar en el update creas un nuevo hilo que funciona de manera independiente a los otros. Piensa que el WaitForSeconds solamente detiene la corrutina, no el update. WaitForSeconds (http://docs.unity3d.com/ScriptReference/WaitForSeconds.html)
Muchas gracias por su ayuda, aclararon mis dudas...
miren lo que hice con mi clase: (//<fileStore.core_Attachment>/monthly_2015_09/55ecbf905af8f_Sin_ttulo.png.9dc327cd0d601fc2470581875a5a7329.png) Y me funciono, Gracias.
Bien. Cuidado que le has llamado Start a la función y esta sobreescribiendo la de MonoBehaviour. Pero mira:
void Start() {
InvokeRepeating("instanciar", 2f, Random.Range(rateMin, rateMax));
}
void instanciar() {
Instantiate(...);
}Lanzará "instanciar" en 2 segundos y luego cada valor de Random.Range
http://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="20262" data-ipsquote-contentcommentid="108113">Bien. Cuidado que le has llamado Start a la función y esta sobreescribiendo la de MonoBehaviour. Pero mira:
void Start() {InvokeRepeating("instanciar", 2f, Random.Range(rateMin, rateMax));
}
void instanciar() {
Instantiate(...);
}Lanzará "instanciar" en 2 segundos y luego cada valor de Random.Range
http://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html [/quote]si justo habia pensado en eso.
cambiare el codigo que tenia por el que usted me ha proporcionado, me parece mas seguro.
Muchas gracias!!!
De nada y a pasarlo bien.