[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.54,0:00:02.71,Default,,0000,0000,0000,,Las funciones Invoke le permiten a usted programar Dialogue: 0,0:00:02.71,0:00:05.74,Default,,0000,0000,0000,,un llamado de función después de cierto tiempo de retraso especifico. Dialogue: 0,0:00:06.54,0:00:08.54,Default,,0000,0000,0000,,Esto nos permite a nosotros construir un sistema Dialogue: 0,0:00:08.54,0:00:10.54,Default,,0000,0000,0000,,útil de llamado de métodos que es sensible al tiempo. Dialogue: 0,0:00:11.96,0:00:14.83,Default,,0000,0000,0000,,Aquí nosotros tenemos una escena en Unity con un game object vacío. Dialogue: 0,0:00:15.63,0:00:18.52,Default,,0000,0000,0000,,El game object tiene un InvokeScript adjunto a éste. Dialogue: 0,0:00:19.80,0:00:21.80,Default,,0000,0000,0000,,En el InvokeScript nosotros tenemos Dialogue: 0,0:00:21.80,0:00:24.18,Default,,0000,0000,0000,,un game object público llamado Target. Dialogue: 0,0:00:24.72,0:00:27.55,Default,,0000,0000,0000,,También tenemos un método llamado SpawnObject. Dialogue: 0,0:00:28.09,0:00:30.52,Default,,0000,0000,0000,,El método SpawnObject simplemente instancia el Dialogue: 0,0:00:30.52,0:00:34.42,Default,,0000,0000,0000,,objeto target en la posición (0, 2, 0). Dialogue: 0,0:00:35.88,0:00:39.81,Default,,0000,0000,0000,,En el método start nosotros llamamos la función Invoke. Dialogue: 0,0:00:39.81,0:00:42.44,Default,,0000,0000,0000,,La función invoke toma 2 parámetros. Dialogue: 0,0:00:42.44,0:00:45.69,Default,,0000,0000,0000,,Un string conteniendo el nombre del método que nosotros queremos llamar Dialogue: 0,0:00:45.69,0:00:48.64,Default,,0000,0000,0000,,y una cantidad de tiempo para retrasar en segundos. Dialogue: 0,0:00:50.68,0:00:53.92,Default,,0000,0000,0000,,Nosotros podemos ver de esta linea de código que después de 2 segundos Dialogue: 0,0:00:53.92,0:00:56.37,Default,,0000,0000,0000,,el método SpawnObject será llamado. Dialogue: 0,0:00:57.74,0:00:59.74,Default,,0000,0000,0000,,Vale la pena tener en cuenta que solamente los métodos que Dialogue: 0,0:00:59.74,0:01:01.74,Default,,0000,0000,0000,,no toman parámetros y tienen un tipo de retorno Dialogue: 0,0:01:01.74,0:01:04.81,Default,,0000,0000,0000,,void pueden ser llamados utilizando invoke. Dialogue: 0,0:01:05.96,0:01:08.68,Default,,0000,0000,0000,,De vuelta en Unity corramos nuestra escena. Dialogue: 0,0:01:09.75,0:01:11.85,Default,,0000,0000,0000,,Nosotros podemos ver que después de 2 segundos un orb Dialogue: 0,0:01:11.85,0:01:14.51,Default,,0000,0000,0000,,es instanciado y cae al suelo. Dialogue: 0,0:01:15.95,0:01:18.87,Default,,0000,0000,0000,,Esto es útil para llamar métodos de un solo tiempo. Dialogue: 0,0:01:18.87,0:01:21.36,Default,,0000,0000,0000,,Pero qué si nosotros quisiéramos llamar un método repetidamente? Dialogue: 0,0:01:22.04,0:01:23.83,Default,,0000,0000,0000,,Esto se puede hacer fácilmente utilizando Dialogue: 0,0:01:23.83,0:01:25.83,Default,,0000,0000,0000,,la función InvokeRepeating. Dialogue: 0,0:01:27.79,0:01:29.79,Default,,0000,0000,0000,,Aquí en nuestra escena nosotros tenemos el mismo Dialogue: 0,0:01:29.79,0:01:31.56,Default,,0000,0000,0000,,game object vacío. Dialogue: 0,0:01:31.56,0:01:33.88,Default,,0000,0000,0000,,Este tiempo sin embargo hay un Dialogue: 0,0:01:33.88,0:01:35.88,Default,,0000,0000,0000,,InvokeRepeatingScript adjunto a este. Dialogue: 0,0:01:37.54,0:01:39.72,Default,,0000,0000,0000,,En el InvokeRepeatingScript Dialogue: 0,0:01:39.72,0:01:41.72,Default,,0000,0000,0000,,nosotros podemos ver cosas que están expuesto exactamente Dialogue: 0,0:01:41.72,0:01:44.19,Default,,0000,0000,0000,,de la misma manera en InvokeScript. Dialogue: 0,0:01:45.57,0:01:48.67,Default,,0000,0000,0000,,Nosotros todavía tenemos un game object público llamado Target Dialogue: 0,0:01:48.67,0:01:51.02,Default,,0000,0000,0000,,y nosotros todavía tenemos un método SpawnObject. Dialogue: 0,0:01:51.63,0:01:53.63,Default,,0000,0000,0000,,El método SpawnObject en este script Dialogue: 0,0:01:53.63,0:01:55.82,Default,,0000,0000,0000,,todavía instancia el objeto target Dialogue: 0,0:01:55.82,0:01:59.25,Default,,0000,0000,0000,,pero ahora lo hace en una posición X y Z aleatoria. Dialogue: 0,0:02:01.07,0:02:03.07,Default,,0000,0000,0000,,En el método start nosotros tenemos una llamada a Dialogue: 0,0:02:03.07,0:02:04.79,Default,,0000,0000,0000,,la función InvokeRepeating. Dialogue: 0,0:02:05.37,0:02:07.37,Default,,0000,0000,0000,,Esta función toma 3 argumentos. Dialogue: 0,0:02:07.37,0:02:09.15,Default,,0000,0000,0000,,Un string que contiene el nombre del método Dialogue: 0,0:02:09.15,0:02:10.62,Default,,0000,0000,0000,,que queremos llamar. Dialogue: 0,0:02:10.62,0:02:13.43,Default,,0000,0000,0000,,El retraso en segundos antes de que llame el método Dialogue: 0,0:02:13.43,0:02:15.24,Default,,0000,0000,0000,,y un retraso en segundos entre cada Dialogue: 0,0:02:15.24,0:02:17.24,Default,,0000,0000,0000,,llamada posterior del método. Dialogue: 0,0:02:18.98,0:02:20.98,Default,,0000,0000,0000,,Nosotros podemos ver de esta linea de código que Dialogue: 0,0:02:20.98,0:02:23.32,Default,,0000,0000,0000,,SpawnObject será llamado después de 2 segundos Dialogue: 0,0:02:23.32,0:02:25.76,Default,,0000,0000,0000,,y luego será llamado nuevamente cada 1 segundo. Dialogue: 0,0:02:27.80,0:02:29.13,Default,,0000,0000,0000,,Veamos esto en acción. Dialogue: 0,0:02:30.37,0:02:32.14,Default,,0000,0000,0000,,En Unity nosotros podemos correr nuestra escena. Dialogue: 0,0:02:32.70,0:02:36.57,Default,,0000,0000,0000,,Nosotros podemos ver que después de 2 segundos un orb es instanciado. Dialogue: 0,0:02:36.57,0:02:38.75,Default,,0000,0000,0000,,Luego cada 1 segundo Dialogue: 0,0:02:38.75,0:02:40.75,Default,,0000,0000,0000,,otro orb es creado. Dialogue: 0,0:02:42.18,0:02:44.18,Default,,0000,0000,0000,,Esto continuará infinitamente y va a llenar Dialogue: 0,0:02:44.18,0:02:46.18,Default,,0000,0000,0000,,nuestra escena entera con orbs. Dialogue: 0,0:02:47.78,0:02:49.78,Default,,0000,0000,0000,,Obviamente es importante conocer Dialogue: 0,0:02:49.78,0:02:51.78,Default,,0000,0000,0000,,cómo parar un método que nosotros hemos llamado Dialogue: 0,0:02:51.78,0:02:53.78,Default,,0000,0000,0000,,con la función InvokeRepeating. Dialogue: 0,0:02:55.18,0:02:57.18,Default,,0000,0000,0000,,Con el fin de parar, todas las instancias Dialogue: 0,0:02:57.18,0:02:59.18,Default,,0000,0000,0000,,de un llamado invoked de este script Dialogue: 0,0:02:59.18,0:03:01.88,Default,,0000,0000,0000,,nosotros podemos utilizar el método CancelInvoke. Dialogue: 0,0:03:03.11,0:03:06.05,Default,,0000,0000,0000,,Si nosotros deseamos solamente parar un Invoke especifico Dialogue: 0,0:03:06.05,0:03:08.05,Default,,0000,0000,0000,,que nosotros podemos parse en un string conteniendo el nombre del Dialogue: 0,0:03:08.05,0:03:10.05,Default,,0000,0000,0000,,método que deseamos parar.