WEBVTT 00:00:00.539 --> 00:00:02.706 Las funciones Invoke le permiten a usted programar 00:00:02.706 --> 00:00:05.742 un llamado de función después de cierto tiempo de retraso especifico. 00:00:06.543 --> 00:00:08.543 Esto nos permite a nosotros construir un sistema 00:00:08.543 --> 00:00:10.543 útil de llamado de métodos que es sensible al tiempo. 00:00:11.956 --> 00:00:14.827 Aquí nosotros tenemos una escena en Unity con un game object vacío. 00:00:15.629 --> 00:00:18.520 El game object tiene un InvokeScript adjunto a éste. 00:00:19.799 --> 00:00:21.799 En el InvokeScript nosotros tenemos 00:00:21.799 --> 00:00:24.176 un game object público llamado Target. 00:00:24.722 --> 00:00:27.552 También tenemos un método llamado SpawnObject. 00:00:28.094 --> 00:00:30.522 El método SpawnObject simplemente instancia el 00:00:30.522 --> 00:00:34.424 objeto target en la posición (0, 2, 0). 00:00:35.882 --> 00:00:39.808 En el método start nosotros llamamos la función Invoke. 00:00:39.808 --> 00:00:42.439 La función invoke toma 2 parámetros. 00:00:42.439 --> 00:00:45.687 Un string conteniendo el nombre del método que nosotros queremos llamar 00:00:45.687 --> 00:00:48.638 y una cantidad de tiempo para retrasar en segundos. 00:00:50.680 --> 00:00:53.921 Nosotros podemos ver de esta linea de código que después de 2 segundos 00:00:53.921 --> 00:00:56.369 el método SpawnObject será llamado. 00:00:57.740 --> 00:00:59.740 Vale la pena tener en cuenta que solamente los métodos que 00:00:59.740 --> 00:01:01.740 no toman parámetros y tienen un tipo de retorno 00:01:01.740 --> 00:01:04.806 void pueden ser llamados utilizando invoke. 00:01:05.959 --> 00:01:08.682 De vuelta en Unity corramos nuestra escena. 00:01:09.751 --> 00:01:11.849 Nosotros podemos ver que después de 2 segundos un orb 00:01:11.849 --> 00:01:14.506 es instanciado y cae al suelo. 00:01:15.946 --> 00:01:18.871 Esto es útil para llamar métodos de un solo tiempo. 00:01:18.871 --> 00:01:21.360 Pero qué si nosotros quisiéramos llamar un método repetidamente? 00:01:22.038 --> 00:01:23.831 Esto se puede hacer fácilmente utilizando 00:01:23.831 --> 00:01:25.831 la función InvokeRepeating. 00:01:27.789 --> 00:01:29.789 Aquí en nuestra escena nosotros tenemos el mismo 00:01:29.789 --> 00:01:31.555 game object vacío. 00:01:31.555 --> 00:01:33.877 Este tiempo sin embargo hay un 00:01:33.877 --> 00:01:35.877 InvokeRepeatingScript adjunto a este. 00:01:37.544 --> 00:01:39.724 En el InvokeRepeatingScript 00:01:39.724 --> 00:01:41.724 nosotros podemos ver cosas que están expuesto exactamente 00:01:41.724 --> 00:01:44.193 de la misma manera en InvokeScript. 00:01:45.571 --> 00:01:48.668 Nosotros todavía tenemos un game object público llamado Target 00:01:48.668 --> 00:01:51.015 y nosotros todavía tenemos un método SpawnObject. 00:01:51.626 --> 00:01:53.626 El método SpawnObject en este script 00:01:53.626 --> 00:01:55.821 todavía instancia el objeto target 00:01:55.821 --> 00:01:59.247 pero ahora lo hace en una posición X y Z aleatoria. 00:02:01.066 --> 00:02:03.066 En el método start nosotros tenemos una llamada a 00:02:03.066 --> 00:02:04.786 la función InvokeRepeating. 00:02:05.372 --> 00:02:07.372 Esta función toma 3 argumentos. 00:02:07.372 --> 00:02:09.149 Un string que contiene el nombre del método 00:02:09.149 --> 00:02:10.619 que queremos llamar. 00:02:10.619 --> 00:02:13.428 El retraso en segundos antes de que llame el método 00:02:13.428 --> 00:02:15.235 y un retraso en segundos entre cada 00:02:15.235 --> 00:02:17.235 llamada posterior del método. 00:02:18.985 --> 00:02:20.985 Nosotros podemos ver de esta linea de código que 00:02:20.985 --> 00:02:23.316 SpawnObject será llamado después de 2 segundos 00:02:23.316 --> 00:02:25.760 y luego será llamado nuevamente cada 1 segundo. 00:02:27.802 --> 00:02:29.130 Veamos esto en acción. 00:02:30.371 --> 00:02:32.136 En Unity nosotros podemos correr nuestra escena. 00:02:32.704 --> 00:02:36.570 Nosotros podemos ver que después de 2 segundos un orb es instanciado. 00:02:36.570 --> 00:02:38.750 Luego cada 1 segundo 00:02:38.750 --> 00:02:40.750 otro orb es creado. 00:02:42.181 --> 00:02:44.181 Esto continuará infinitamente y va a llenar 00:02:44.181 --> 00:02:46.181 nuestra escena entera con orbs. 00:02:47.778 --> 00:02:49.778 Obviamente es importante conocer 00:02:49.778 --> 00:02:51.778 cómo parar un método que nosotros hemos llamado 00:02:51.778 --> 00:02:53.778 con la función InvokeRepeating. 00:02:55.181 --> 00:02:57.181 Con el fin de parar, todas las instancias 00:02:57.181 --> 00:02:59.181 de un llamado invoked de este script 00:02:59.181 --> 00:03:01.880 nosotros podemos utilizar el método CancelInvoke. 00:03:03.112 --> 00:03:06.049 Si nosotros deseamos solamente parar un Invoke especifico 00:03:06.049 --> 00:03:08.049 que nosotros podemos parse en un string conteniendo el nombre del 00:03:08.049 --> 00:03:10.049 método que deseamos parar.