1 00:00:00,539 --> 00:00:02,706 Las funciones Invoke le permiten a usted programar 2 00:00:02,706 --> 00:00:05,742 un llamado de función después de cierto tiempo de retraso especifico. 3 00:00:06,543 --> 00:00:08,543 Esto nos permite a nosotros construir un sistema 4 00:00:08,543 --> 00:00:10,543 útil de llamado de métodos que es sensible al tiempo. 5 00:00:11,956 --> 00:00:14,827 Aquí nosotros tenemos una escena en Unity con un game object vacío. 6 00:00:15,629 --> 00:00:18,520 El game object tiene un InvokeScript adjunto a éste. 7 00:00:19,799 --> 00:00:21,799 En el InvokeScript nosotros tenemos 8 00:00:21,799 --> 00:00:24,176 un game object público llamado Target. 9 00:00:24,722 --> 00:00:27,552 También tenemos un método llamado SpawnObject. 10 00:00:28,094 --> 00:00:30,522 El método SpawnObject simplemente instancia el 11 00:00:30,522 --> 00:00:34,424 objeto target en la posición (0, 2, 0). 12 00:00:35,882 --> 00:00:39,808 En el método start nosotros llamamos la función Invoke. 13 00:00:39,808 --> 00:00:42,439 La función invoke toma 2 parámetros. 14 00:00:42,439 --> 00:00:45,687 Un string conteniendo el nombre del método que nosotros queremos llamar 15 00:00:45,687 --> 00:00:48,638 y una cantidad de tiempo para retrasar en segundos. 16 00:00:50,680 --> 00:00:53,921 Nosotros podemos ver de esta linea de código que después de 2 segundos 17 00:00:53,921 --> 00:00:56,369 el método SpawnObject será llamado. 18 00:00:57,740 --> 00:00:59,740 Vale la pena tener en cuenta que solamente los métodos que 19 00:00:59,740 --> 00:01:01,740 no toman parámetros y tienen un tipo de retorno 20 00:01:01,740 --> 00:01:04,806 void pueden ser llamados utilizando invoke. 21 00:01:05,959 --> 00:01:08,682 De vuelta en Unity corramos nuestra escena. 22 00:01:09,751 --> 00:01:11,849 Nosotros podemos ver que después de 2 segundos un orb 23 00:01:11,849 --> 00:01:14,506 es instanciado y cae al suelo. 24 00:01:15,946 --> 00:01:18,871 Esto es útil para llamar métodos de un solo tiempo. 25 00:01:18,871 --> 00:01:21,360 Pero qué si nosotros quisiéramos llamar un método repetidamente? 26 00:01:22,038 --> 00:01:23,831 Esto se puede hacer fácilmente utilizando 27 00:01:23,831 --> 00:01:25,831 la función InvokeRepeating. 28 00:01:27,789 --> 00:01:29,789 Aquí en nuestra escena nosotros tenemos el mismo 29 00:01:29,789 --> 00:01:31,555 game object vacío. 30 00:01:31,555 --> 00:01:33,877 Este tiempo sin embargo hay un 31 00:01:33,877 --> 00:01:35,877 InvokeRepeatingScript adjunto a este. 32 00:01:37,544 --> 00:01:39,724 En el InvokeRepeatingScript 33 00:01:39,724 --> 00:01:41,724 nosotros podemos ver cosas que están expuesto exactamente 34 00:01:41,724 --> 00:01:44,193 de la misma manera en InvokeScript. 35 00:01:45,571 --> 00:01:48,668 Nosotros todavía tenemos un game object público llamado Target 36 00:01:48,668 --> 00:01:51,015 y nosotros todavía tenemos un método SpawnObject. 37 00:01:51,626 --> 00:01:53,626 El método SpawnObject en este script 38 00:01:53,626 --> 00:01:55,821 todavía instancia el objeto target 39 00:01:55,821 --> 00:01:59,247 pero ahora lo hace en una posición X y Z aleatoria. 40 00:02:01,066 --> 00:02:03,066 En el método start nosotros tenemos una llamada a 41 00:02:03,066 --> 00:02:04,786 la función InvokeRepeating. 42 00:02:05,372 --> 00:02:07,372 Esta función toma 3 argumentos. 43 00:02:07,372 --> 00:02:09,149 Un string que contiene el nombre del método 44 00:02:09,149 --> 00:02:10,619 que queremos llamar. 45 00:02:10,619 --> 00:02:13,428 El retraso en segundos antes de que llame el método 46 00:02:13,428 --> 00:02:15,235 y un retraso en segundos entre cada 47 00:02:15,235 --> 00:02:17,235 llamada posterior del método. 48 00:02:18,985 --> 00:02:20,985 Nosotros podemos ver de esta linea de código que 49 00:02:20,985 --> 00:02:23,316 SpawnObject será llamado después de 2 segundos 50 00:02:23,316 --> 00:02:25,760 y luego será llamado nuevamente cada 1 segundo. 51 00:02:27,802 --> 00:02:29,130 Veamos esto en acción. 52 00:02:30,371 --> 00:02:32,136 En Unity nosotros podemos correr nuestra escena. 53 00:02:32,704 --> 00:02:36,570 Nosotros podemos ver que después de 2 segundos un orb es instanciado. 54 00:02:36,570 --> 00:02:38,750 Luego cada 1 segundo 55 00:02:38,750 --> 00:02:40,750 otro orb es creado. 56 00:02:42,181 --> 00:02:44,181 Esto continuará infinitamente y va a llenar 57 00:02:44,181 --> 00:02:46,181 nuestra escena entera con orbs. 58 00:02:47,778 --> 00:02:49,778 Obviamente es importante conocer 59 00:02:49,778 --> 00:02:51,778 cómo parar un método que nosotros hemos llamado 60 00:02:51,778 --> 00:02:53,778 con la función InvokeRepeating. 61 00:02:55,181 --> 00:02:57,181 Con el fin de parar, todas las instancias 62 00:02:57,181 --> 00:02:59,181 de un llamado invoked de este script 63 00:02:59,181 --> 00:03:01,880 nosotros podemos utilizar el método CancelInvoke. 64 00:03:03,112 --> 00:03:06,049 Si nosotros deseamos solamente parar un Invoke especifico 65 00:03:06,049 --> 00:03:08,049 que nosotros podemos parse en un string conteniendo el nombre del 66 00:03:08,049 --> 00:03:10,049 método que deseamos parar.