Las funciones Invoke le permiten a usted programar
un llamado de función después de cierto tiempo de retraso especifico.
Esto nos permite a nosotros construir un sistema
útil de llamado de métodos que es sensible al tiempo.
Aquí nosotros tenemos una escena en Unity con un game object vacío.
El game object tiene un InvokeScript adjunto a éste.
En el InvokeScript nosotros tenemos
un game object público llamado Target.
También tenemos un método llamado SpawnObject.
El método SpawnObject simplemente instancia el
objeto target en la posición (0, 2, 0).
En el método start nosotros llamamos la función Invoke.
La función invoke toma 2 parámetros.
Un string conteniendo el nombre del método que nosotros queremos llamar
y una cantidad de tiempo para retrasar en segundos.
Nosotros podemos ver de esta linea de código que después de 2 segundos
el método SpawnObject será llamado.
Vale la pena tener en cuenta que solamente los métodos que
no toman parámetros y tienen un tipo de retorno
void pueden ser llamados utilizando invoke.
De vuelta en Unity corramos nuestra escena.
Nosotros podemos ver que después de 2 segundos un orb
es instanciado y cae al suelo.
Esto es útil para llamar métodos de un solo tiempo.
Pero qué si nosotros quisiéramos llamar un método repetidamente?
Esto se puede hacer fácilmente utilizando
la función InvokeRepeating.
Aquí en nuestra escena nosotros tenemos el mismo
game object vacío.
Este tiempo sin embargo hay un
InvokeRepeatingScript adjunto a este.
En el InvokeRepeatingScript
nosotros podemos ver cosas que están expuesto exactamente
de la misma manera en InvokeScript.
Nosotros todavía tenemos un game object público llamado Target
y nosotros todavía tenemos un método SpawnObject.
El método SpawnObject en este script
todavía instancia el objeto target
pero ahora lo hace en una posición X y Z aleatoria.
En el método start nosotros tenemos una llamada a
la función InvokeRepeating.
Esta función toma 3 argumentos.
Un string que contiene el nombre del método
que queremos llamar.
El retraso en segundos antes de que llame el método
y un retraso en segundos entre cada
llamada posterior del método.
Nosotros podemos ver de esta linea de código que
SpawnObject será llamado después de 2 segundos
y luego será llamado nuevamente cada 1 segundo.
Veamos esto en acción.
En Unity nosotros podemos correr nuestra escena.
Nosotros podemos ver que después de 2 segundos un orb es instanciado.
Luego cada 1 segundo
otro orb es creado.
Esto continuará infinitamente y va a llenar
nuestra escena entera con orbs.
Obviamente es importante conocer
cómo parar un método que nosotros hemos llamado
con la función InvokeRepeating.
Con el fin de parar, todas las instancias
de un llamado invoked de este script
nosotros podemos utilizar el método CancelInvoke.
Si nosotros deseamos solamente parar un Invoke especifico
que nosotros podemos parse en un string conteniendo el nombre del
método que deseamos parar.