Hola a todos, tengo dudas de la utilidad de IEnumerator , cuando podría hacer algo como invoke( metodo, tiempo ).Se que sera una duda tonta, pero de verdad no entiendo. jajaja
ienumerator es lo que devuelve una función que corre en otro hilo, invoke es como un reloj que corre una función en cierto tiempo
:/ no te entiendo, vendria a funcionar IEnumerator como un "set" ¿mas o menos?, :C ¿podrías darme un ejemplo?
( :3 Gracias por responder)
es como un registro que guarda el estado del método
veamos...
he visto que lo usan de esta manera.
void Start() {
StartCoroutine(Ejemplo(3f));
}
IEnumerator Ejemplo (float tiempo ) {
yield return new WaitForSeconds(tiempo);
Debug.Log ("pasaron 3 segundos");
}No entiendo.. que diferencia hay de hacer eso con hacer algo como :
void Start () {
Invoke ("Ejemplo", 3f);
}
void Ejemplo () {
Debug.Log ("pasaron 3 segundos");
}Algo me dice que estoy entendiendo el IEnumerator mal.. jajaja. :C
por qué tendría que haber diferencia? en programación hay montones de formas de hacer la misma cosa, nada mas elige la que te guste
Pero dices que actua como un registro, ¿de que manera actua como un registro?
o sea el ienumerator guarda el estado de la corutina, así unity la puede continuar despues cuando se cumple cierta condicion como el paso del tiempo que pidas... la corrutina es una funcion que se puede pausar y el ienumerator es el registro que guarda su estado (variables locales, pila...)
Vale creo que empiezo a entenderlo un poco mas Gracias
Un Invoke es como la versión simple y cutre de un IEnumerator.Si lo único que necesitas es ejecutar una función con un retraso de X tiempo, puedes usar un Invoke y te quedas con pancho. Pero si necesitas mayor control del tiempo sobre una función, entonces el Invoke se queda corto y tienes que tirar de IEnumerator.Por ponerte un ejemplo. Imagina que tienes una función. Que quiero que muestre un mensaje por pantalla. Luego espere 2 segundos. Muestre otro mensaje. Después espere que pulse una tecla. Si la tecla es la letra Y, se acaba. Si la tecla es la letra N, vuelve a mostrar el segundo mensaje y se vuelve a quedar a la espera.Algo como eso, con un IEnumerator es fácil. Hacerlo usando Invokes puede ser ... imposible.
La gente te está tratando de explicar que son cosas distintas. Invoke es una llamada aleatoria a una función y que se ejecutará tras un tiempo dado como argumento.IEnumerator es un tipo de función que puede o no devolver un valor, y que su principal característica es que es Asíncrono. Se ejecutará y devolverá el valor cuando él pueda o encuentre un momento libre de trabajo. Las tareas asíncronas suelen usarse en cosas como Colas de trabajo (queues), colisiones poco importantes, rutinas en 2º plano, y en general para gestionar todos esos trabajos del juego que no son TAN importantes ni necesarios en un momento determinado, pero que quieras que se acaben haciendo sí o sí.Por ejemplo, el envío de mensajes de red en juegos multiplayer, cuando tu mandas o recibes paquetes. Eso suele usar llamadas asíncronas, para no colapsar la red. Recordad también que en Videojuegos, los Cálculos matemáticos de coordenadas/vectores para colisiones, las condiciones que varían la Lógica del juego, y las decisiones de una acción u otra, son siempre de 1er Orden, o cosas MÁS importantes, que no otras (cambiar el fondo de pantalla, cargar un nivel, cambiar el valor a un texto de la GUI, etc son ejemplos de cosas MENOS importantes para el juego y por tanto puedes usar métodos asíncronos en ellos, y permitirte el lujo de liberar unos pocos milisegundos.)
Muchas gracias a los 3 ahora si tengo muchisimo mas claro esto.
De verdad mil y mil gracias :3