1 00:00:07,019 --> 00:00:12,359 Bien, llevemos ese mapeo maravilloso que hemos hecho a código para poder, pues, programar. 2 00:00:12,359 --> 00:00:15,119 Como ya comenté, vamos a ver tres métodos. 3 00:00:15,580 --> 00:00:17,239 Empiezo con el que más me gusta a mí, ¿no? 4 00:00:17,320 --> 00:00:20,920 Es el que aparece por defecto en la documentación de Unity, pero es válido. 5 00:00:21,399 --> 00:00:26,199 Y a lo mejor yo lo uso porque es el primero que aprendí y, oye, ya sabemos que cuando tenemos un martillo entre las manos 6 00:00:26,199 --> 00:00:28,719 todos nos parecen clavos, pero es válido. 7 00:00:28,859 --> 00:00:33,960 Así que empiezo por ese y luego ya veremos otros dos, ya que cada uno elija. 8 00:00:33,960 --> 00:00:37,600 para ello, volvemos otra vez al proyecto 9 00:00:37,600 --> 00:00:40,399 y lo primero que haremos es 10 00:00:40,399 --> 00:00:43,979 en ese asset de acciones que hemos creado 11 00:00:43,979 --> 00:00:47,619 que por cierto, muy mal, no lo tenía dentro de su carpeta correspondiente 12 00:00:47,619 --> 00:00:49,920 lo primero que vamos a hacer 13 00:00:49,920 --> 00:00:51,520 es crear una clase con él 14 00:00:51,520 --> 00:00:55,460 esto no es obligatorio en otros métodos, pero en el que vamos a hacer ahora, sí 15 00:00:55,460 --> 00:00:58,700 es decir, no existe una clase pública a la que podamos llamar 16 00:00:58,700 --> 00:01:01,299 con esos inputs, pero la podemos crear 17 00:01:01,299 --> 00:01:03,359 si nos fijamos aquí, tenemos el botoncito de 18 00:01:03,359 --> 00:01:04,859 generar una clase 19 00:01:04,859 --> 00:01:07,299 que si lo seleccionamos 20 00:01:07,299 --> 00:01:08,780 nos preguntará 21 00:01:08,780 --> 00:01:11,500 dónde guardarla. Podemos cambiar 22 00:01:11,500 --> 00:01:13,560 la carpeta. Por defecto la mete en el mismo 23 00:01:13,560 --> 00:01:14,420 sitio que está el asset. 24 00:01:15,099 --> 00:01:17,260 ¿Cómo llamarlo? Por defecto lo llama 25 00:01:17,260 --> 00:01:19,439 igual que el asset que hemos creado 26 00:01:19,439 --> 00:01:21,379 pero que puede cambiarse igualmente. 27 00:01:22,019 --> 00:01:23,439 Incluso se le puede dar un global name 28 00:01:23,439 --> 00:01:25,519 space, que ni me meto en eso lo que es, pero sería 29 00:01:25,519 --> 00:01:26,420 para la hora de llamarlo. 30 00:01:27,260 --> 00:01:29,420 Las opciones que vienen por defecto a mí me valen, pero siempre 31 00:01:29,420 --> 00:01:31,540 recordad que le está llamando igual que el archivo. 32 00:01:31,540 --> 00:01:34,939 aplicar. Y veremos que 33 00:01:34,939 --> 00:01:37,540 donde yo le he dicho, ha creado un archivo 34 00:01:37,540 --> 00:01:40,640 de código que no debemos tocar. 35 00:01:41,239 --> 00:01:43,920 Que quede claro. Eso no es para que lo abramos y lo toquemos. 36 00:01:44,079 --> 00:01:47,219 No. Bien. Tengo un script 37 00:01:47,219 --> 00:01:49,700 ya creado, al que he llamado PlayerManager. 38 00:01:50,140 --> 00:01:53,280 Lo voy a abrir. Ahí está. Le he quitado el start y el update 39 00:01:53,280 --> 00:01:56,159 para que no molesten. Y entonces, lo primero 40 00:01:56,159 --> 00:01:59,180 que tenemos que hacer es acceder a esa nueva clase que hemos creado. 41 00:01:59,180 --> 00:02:02,400 entonces es de tipo 42 00:02:02,400 --> 00:02:05,659 inputActions porque la he llamado así 43 00:02:05,659 --> 00:02:08,919 si la hemos llamado de otra forma será la clase de otra forma 44 00:02:08,919 --> 00:02:11,759 será el que le hayamos dado y bueno ya sabéis que 45 00:02:11,759 --> 00:02:13,819 por deferencia pues el mismo nombre 46 00:02:13,819 --> 00:02:17,120 en minúscula para indicar que esa es la instancia de la clase 47 00:02:17,120 --> 00:02:20,879 todo lo que tiene que ver con inputs lo normal es 48 00:02:20,879 --> 00:02:23,259 llamarlo en el awake, ya veremos 49 00:02:23,259 --> 00:02:26,620 porque no espera que cargue la escena, entonces en el awake 50 00:02:26,620 --> 00:02:30,000 lo primero que tengo que hacer es crear una instancia de esa clase 51 00:02:30,000 --> 00:02:32,860 entonces inputActions en minúscula 52 00:02:32,860 --> 00:02:35,639 porque la instancia es igual a, cuidado que aquí Visual Studio 53 00:02:35,639 --> 00:02:38,620 sugiere algo que no es 54 00:02:38,620 --> 00:02:41,659 porque yo no tengo ese componente, yo no lo tengo, yo lo que tengo es que 55 00:02:41,659 --> 00:02:44,659 crearlo, igual que cuando creamos una nueva instancia de un Vector3 56 00:02:44,659 --> 00:02:47,680 o lo que sea, así que es un new inputActions 57 00:02:47,680 --> 00:02:50,379 ahí está, ahora me voy a poner un poco serio 58 00:02:50,379 --> 00:02:53,419 antes de seguir, esto que voy a hacer ahora 59 00:02:53,419 --> 00:02:57,460 lo recomiendan en dos de las tres métodos que vamos a ver 60 00:02:57,460 --> 00:03:01,419 y tenemos que entenderlo, porque si no lo hacemos no pasa nada, pero Unity 61 00:03:01,419 --> 00:03:05,259 recomienda hacerlo, así que yo soy el mensajero 62 00:03:05,259 --> 00:03:09,340 cada vez que activamos unas entradas realmente estamos escuchando 63 00:03:09,340 --> 00:03:12,879 constantemente, entonces una medida de seguridad que tiene Unity es decirle 64 00:03:12,879 --> 00:03:17,300 estas entradas activalas cuando el objeto que tiene este script 65 00:03:17,300 --> 00:03:21,159 esté activo en la escena, antes no, y desactivalas 66 00:03:21,159 --> 00:03:23,180 si ese objeto deja de estar activo 67 00:03:23,180 --> 00:03:24,699 en la escena. De forma que 68 00:03:24,699 --> 00:03:26,759 es una forma también de decir, oye, si 69 00:03:26,759 --> 00:03:28,580 por lo que sea he desactivado 70 00:03:28,580 --> 00:03:31,460 el objeto que tiene estas entradas, automáticamente 71 00:03:31,460 --> 00:03:33,060 desactiva esos inputs 72 00:03:33,060 --> 00:03:35,000 porque se supone que están vinculados a ese objeto. 73 00:03:35,840 --> 00:03:37,259 Eso se hace utilizando 74 00:03:37,259 --> 00:03:39,300 un método que hasta ahora no hemos usado 75 00:03:39,300 --> 00:03:40,580 nunca, aunque sí que lo 76 00:03:40,580 --> 00:03:43,020 hemos mencionado, que es onEnable 77 00:03:43,020 --> 00:03:44,759 que funciona un poco igual que 78 00:03:44,759 --> 00:03:47,240 el start o el away, pero que se lanza 79 00:03:47,240 --> 00:03:48,780 cada vez que activo el objeto 80 00:03:48,780 --> 00:03:51,580 que tiene el script. Es decir, si yo lo desactivase 81 00:03:51,580 --> 00:03:53,719 y lo volviese a activar, saltaría 82 00:03:53,719 --> 00:03:55,340 el onEnable. ¿Y qué hacemos 83 00:03:55,340 --> 00:03:57,219 cuando me activo? Pues que ese 84 00:03:57,219 --> 00:03:58,719 inputActions que hemos creado 85 00:03:58,719 --> 00:04:01,300 lo activo. Ahí está. 86 00:04:01,659 --> 00:04:03,539 Con su método de enable. Y lo mismo tengo que 87 00:04:03,539 --> 00:04:05,780 hacer si desactivo. 88 00:04:06,319 --> 00:04:07,819 Ahí está. Esto de aquí 89 00:04:07,819 --> 00:04:09,840 lo tenemos que hacer siempre. 90 00:04:10,979 --> 00:04:11,580 Y yo... 91 00:04:11,580 --> 00:04:13,159 Da igual donde pongamos este código. Yo 92 00:04:13,159 --> 00:04:15,439 siempre lo meto al final del script. 93 00:04:15,539 --> 00:04:17,540 Me resulta más cómodo. Pero tiene que estar. 94 00:04:17,779 --> 00:04:18,220 Tiene que estar. 95 00:04:18,779 --> 00:04:22,500 Insisto, si no lo ponemos sigue funcionando, pero eso no significa que esté bien. 96 00:04:22,500 --> 00:04:27,199 Bien, y ahora es donde empieza lo interesante, que es en el mismo Awake. 97 00:04:28,399 --> 00:04:31,000 ¿Cómo funciona este sistema que es el que a mí me gusta? 98 00:04:32,060 --> 00:04:37,259 En el método Awake, ahora es cuando nosotros podemos llamar al inputActions 99 00:04:37,259 --> 00:04:45,339 a un mapa de acciones en concreto, es decir, esta es la sintaxis, la instancia del input. 100 00:04:45,339 --> 00:04:47,680 el mapa de acciones que hemos creado 101 00:04:47,680 --> 00:04:50,000 os recuerdo que yo he creado una llamada player 102 00:04:50,000 --> 00:04:52,040 entonces llamo a player 103 00:04:52,040 --> 00:04:53,399 a continuación 104 00:04:53,399 --> 00:04:56,100 la acción a la que quiero yo llamar 105 00:04:56,100 --> 00:04:57,560 por ejemplo la de jump 106 00:04:57,560 --> 00:05:00,399 el me autocompleta, sabe que está ahí 107 00:05:00,399 --> 00:05:01,180 y ahora 108 00:05:01,180 --> 00:05:03,759 tenemos 109 00:05:03,759 --> 00:05:05,939 tres opciones 110 00:05:05,939 --> 00:05:08,120 ahora que hemos llamado a una acción 111 00:05:08,120 --> 00:05:08,800 una 112 00:05:08,800 --> 00:05:11,519 cuando se inicia 113 00:05:11,519 --> 00:05:13,920 pensemos en un botón, es cuando lo pulso 114 00:05:13,920 --> 00:05:18,259 Dos, mientras se está ejecutando 115 00:05:18,259 --> 00:05:21,120 En un botón sería mientras lo estoy pulsando 116 00:05:21,120 --> 00:05:22,420 Pero pensemos más en un joystick 117 00:05:22,420 --> 00:05:24,800 Mientras se esté moviendo ese joystick 118 00:05:24,800 --> 00:05:26,500 Hay que hacer algo 119 00:05:26,500 --> 00:05:28,959 Y tres, cuando dejo de pulsarlo 120 00:05:28,959 --> 00:05:31,160 O cuando dejo de mover el joystick 121 00:05:31,160 --> 00:05:32,720 El primero sería started 122 00:05:32,720 --> 00:05:34,379 El segundo sería perform 123 00:05:34,379 --> 00:05:36,639 Y el tercero sería cancel 124 00:05:36,639 --> 00:05:38,000 Lo vamos a ver 125 00:05:38,000 --> 00:05:40,319 Quiero que cuando pulse el botón de jump 126 00:05:40,319 --> 00:05:41,360 Pase algo 127 00:05:41,360 --> 00:05:42,819 Eso es started 128 00:05:42,819 --> 00:05:46,319 y ahora, esta sintaxis es un poco extraña 129 00:05:46,319 --> 00:05:48,959 pero vamos, ya llega un momento en que nos acostumbramos a ello 130 00:05:48,959 --> 00:05:51,600 porque lo que necesitamos es que ocurra algo 131 00:05:51,600 --> 00:05:54,120 entonces eso es un más igual porque 132 00:05:54,120 --> 00:05:56,759 esto lo he mencionado porque tampoco quería liar mucho 133 00:05:56,759 --> 00:06:00,939 pero este sistema utiliza callbacks, es decir, necesito que me devuelvas un valor 134 00:06:00,939 --> 00:06:04,519 como el jump no me tiene que devolver nada 135 00:06:04,519 --> 00:06:06,360 voy a poner una barra baja 136 00:06:06,360 --> 00:06:09,100 más que nada porque es una convención para decir 137 00:06:09,100 --> 00:06:12,339 mira, yo no necesito que me devuelvas nada, el callback no va a ser nada 138 00:06:12,339 --> 00:06:15,860 igual y mayor que para hacer algo 139 00:06:15,860 --> 00:06:20,639 después de obtenerse callback. ¿Qué quiero hacer después de esto? 140 00:06:20,759 --> 00:06:24,579 Ahora veremos tres formas en las que tenemos para actuar una vez ya 141 00:06:24,579 --> 00:06:28,600 llamada esa acción. Una, la más cómoda y más rápida, por eso he empezado 142 00:06:28,600 --> 00:06:33,180 por el jam, llamar a un método. Por ejemplo, si yo creo un método que le llamo 143 00:06:33,180 --> 00:06:35,180 saltar, en español para 144 00:06:35,180 --> 00:06:40,100 distinguirlo del jam de la acción, aunque lo podría llamar jam igualmente 145 00:06:40,100 --> 00:06:43,540 y voy a poner un envío a consola que es saltando 146 00:06:43,540 --> 00:06:46,500 para comprobar que efectivamente se está ejecutando 147 00:06:46,500 --> 00:06:49,199 pues bien, volvamos a la línea 148 00:06:49,199 --> 00:06:51,519 la instancia de los inputs 149 00:06:51,519 --> 00:06:55,459 el mapa de acciones, la acción y starter que se lanza 150 00:06:55,459 --> 00:06:57,839 cuando inicio el salto 151 00:06:57,839 --> 00:07:03,360 y llamo al método saltar 152 00:07:03,360 --> 00:07:05,319 antes de seguir 153 00:07:05,319 --> 00:07:08,300 y como yo sé que va a funcionar 154 00:07:08,300 --> 00:07:10,120 voy a meter otro método que se llame 155 00:07:10,120 --> 00:07:12,000 dejar de saltar 156 00:07:12,000 --> 00:07:15,129 ¿y cuándo se llama esto? 157 00:07:15,949 --> 00:07:16,990 voy a llamar print 158 00:07:16,990 --> 00:07:19,870 he dejado de saltar 159 00:07:19,870 --> 00:07:22,009 ¿y cuándo voy a llamar 160 00:07:22,009 --> 00:07:23,569 a esto? cuando 161 00:07:23,569 --> 00:07:28,050 deje de pulsar el botón 162 00:07:28,050 --> 00:07:29,829 y eso es cancel 163 00:07:29,829 --> 00:07:32,050 tenemos started y cancel, viene muy 164 00:07:32,050 --> 00:07:33,990 bien, por ejemplo, para booleanas en las 165 00:07:33,990 --> 00:07:36,009 que digo, oye, cuando pulse el botón esa booleana 166 00:07:36,009 --> 00:07:38,129 es true y cuando pulse el botón esa booleana 167 00:07:38,129 --> 00:07:39,629 es false, lo veremos también con un ejemplo 168 00:07:39,629 --> 00:07:41,750 y esto llama 169 00:07:41,750 --> 00:07:50,889 a dejar de saltar. Si todo va bien, si todo va bien, le doy al play. Había vinculado 170 00:07:50,889 --> 00:07:54,949 el salto a la barra espaciadora, por ejemplo, entonces si pulso la barra espaciadora, efectivamente 171 00:07:54,949 --> 00:07:59,670 me dice que está saltando y si suelto la barra espaciadora me dice que ha dejado de 172 00:07:59,670 --> 00:08:06,430 saltar. Correcto. Y también funciona con la saltando, he dejado de saltar. ¿Qué ocurre 173 00:08:06,430 --> 00:08:10,310 si, por ejemplo, como hemos dicho, quiero ahora hacer 174 00:08:10,310 --> 00:08:13,529 un botón de agachado, que va a ser la B, por ejemplo. 175 00:08:15,069 --> 00:08:18,209 Hacemos un repaso para que así veamos que es tremendamente fácil. 176 00:08:18,629 --> 00:08:22,310 Si yo me voy a mi input system, lo abro, me voy a mi player 177 00:08:22,310 --> 00:08:25,410 y voy a añadir una nueva acción que va a ser crouch, agachar. 178 00:08:26,250 --> 00:08:29,589 ¿Qué es un botón? Acordaros siempre de si es un botón o un value. 179 00:08:30,129 --> 00:08:33,929 Binding, listen, botón B, que es el botón derecho 180 00:08:33,929 --> 00:08:35,929 de cualquier gamepad 181 00:08:35,929 --> 00:08:37,970 o que narices, puedo incluso añadir 182 00:08:37,970 --> 00:08:40,009 una nueva acción y vincularlo con 183 00:08:40,009 --> 00:08:40,909 el control 184 00:08:40,909 --> 00:08:43,690 del teclado, ahora ya está, guardar 185 00:08:43,690 --> 00:08:45,850 siempre que guardar, si no, no se aplican los cambios 186 00:08:45,850 --> 00:08:47,789 y además 187 00:08:47,789 --> 00:08:49,590 lo bueno es que actualiza la clase 188 00:08:49,590 --> 00:08:50,649 que hemos creado previamente 189 00:08:50,649 --> 00:08:53,769 eso significa que si me voy a mi 190 00:08:53,769 --> 00:08:55,970 código, pues ya podría 191 00:08:55,970 --> 00:08:57,870 llamarlos, pero antes de hacerlo y para que entendamos 192 00:08:57,870 --> 00:09:00,029 otra funcionalidad 193 00:09:00,029 --> 00:09:00,830 que tiene este sistema 194 00:09:00,830 --> 00:09:02,750 voy a crear una booleana 195 00:09:02,750 --> 00:09:04,669 creo que va a llamar crouched 196 00:09:04,669 --> 00:09:06,149 agachado 197 00:09:06,149 --> 00:09:09,269 le voy a decir por defecto que es false, aunque os recuerdo que 198 00:09:09,269 --> 00:09:11,090 cuando a una booleana 199 00:09:11,090 --> 00:09:13,110 no le decimos nada, él le entiende que por defecto es false 200 00:09:13,110 --> 00:09:14,850 vamos a mis inputs 201 00:09:14,850 --> 00:09:17,190 y le doy, oye, misma mecánica 202 00:09:17,190 --> 00:09:18,090 input actions 203 00:09:18,090 --> 00:09:20,289 dentro del mapa de acciones, player 204 00:09:20,289 --> 00:09:23,029 veis que ahora aparece crouch, lo reconoce 205 00:09:23,029 --> 00:09:24,889 la que ha acabado de crear, y started 206 00:09:24,889 --> 00:09:27,009 esto no lo quiero 207 00:09:27,009 --> 00:09:28,590 lo mismo 208 00:09:28,590 --> 00:09:30,809 no necesito un callback, por eso pongo un guión bajo 209 00:09:30,809 --> 00:09:31,950 pero 210 00:09:31,950 --> 00:09:36,769 no quiero llamar a un método, quiero ejecutar un código. Entonces tenemos que entender 211 00:09:36,769 --> 00:09:40,850 que si yo aquí pongo una llave, llave de apertura y llave de cierre 212 00:09:40,850 --> 00:09:43,909 veréis que me da un error. ¿Por qué me da un error? Porque pide 213 00:09:43,909 --> 00:09:48,690 un punto y coma para terminar. En algunos códigos no pide punto y coma para cerrar unas llaves 214 00:09:48,690 --> 00:09:54,379 pero aquí sí. Entonces, lo voy a poner así para que sea más entendible 215 00:09:54,379 --> 00:09:58,139 yo abro unas llaves, cierro unas llaves 216 00:09:58,139 --> 00:10:02,379 y todo el código que meta aquí dentro de esas llaves se va a ejecutar 217 00:10:02,379 --> 00:10:03,759 cuando pulse ese botón. 218 00:10:04,580 --> 00:10:06,159 Por ejemplo, voy a mandar a consola 219 00:10:06,159 --> 00:10:08,059 me agacho 220 00:10:08,059 --> 00:10:12,279 y no solo eso, sino que voy a ponerle 221 00:10:12,279 --> 00:10:12,919 que clauchet 222 00:10:12,919 --> 00:10:15,820 es true. 223 00:10:17,100 --> 00:10:18,340 Para que veamos que yo puedo poner 224 00:10:18,340 --> 00:10:20,340 todas las líneas de código que conseguir oportuno. 225 00:10:20,840 --> 00:10:22,200 De hecho, voy a duplicar, 226 00:10:22,240 --> 00:10:24,179 ya sabéis, control D, y le voy a decir 227 00:10:24,179 --> 00:10:26,399 que cuando deje de pulsar ese botón 228 00:10:26,399 --> 00:10:27,019 cancel 229 00:10:27,019 --> 00:10:29,639 manda consola 230 00:10:29,639 --> 00:10:31,279 me levanto 231 00:10:31,279 --> 00:10:35,379 y crouched será false 232 00:10:35,379 --> 00:10:37,259 y podría poner más líneas de código 233 00:10:37,259 --> 00:10:38,440 vamos a ver si funciona 234 00:10:38,440 --> 00:10:39,919 y es más, para ver esto 235 00:10:39,919 --> 00:10:42,299 de hecho voy a entrar en modo debug 236 00:10:42,299 --> 00:10:43,820 porque al entrar en modo debug 237 00:10:43,820 --> 00:10:45,279 me va a permitir ver 238 00:10:45,279 --> 00:10:49,019 la variable crouched 239 00:10:49,019 --> 00:10:50,419 vamos allá 240 00:10:50,419 --> 00:10:51,899 botón B 241 00:10:51,899 --> 00:10:54,100 efectivamente 242 00:10:54,100 --> 00:10:55,799 me pone que crouched es true 243 00:10:55,799 --> 00:10:56,639 como podemos ver ahí 244 00:10:56,639 --> 00:10:57,899 y además me lo ha mandado a consola 245 00:10:57,899 --> 00:10:59,059 y si lo suelto 246 00:10:59,059 --> 00:11:00,820 se levanta 247 00:11:00,820 --> 00:11:01,500 y crouched 248 00:11:01,500 --> 00:11:04,379 es false. Vayamos al último 249 00:11:04,379 --> 00:11:06,379 que es, vale, hasta ahora 250 00:11:06,379 --> 00:11:08,460 hemos visto cómo puedo llamar un método y puedo 251 00:11:08,460 --> 00:11:10,580 también ejecutar unas líneas de código 252 00:11:10,580 --> 00:11:11,960 pero cuando necesito 253 00:11:11,960 --> 00:11:14,360 recuperar un valor, pues la cosa 254 00:11:14,360 --> 00:11:16,259 se complica. Para ello voy a crear 255 00:11:16,259 --> 00:11:18,759 un vector2 256 00:11:18,759 --> 00:11:19,899 que le voy a llamar move 257 00:11:19,899 --> 00:11:22,340 entonces, teniendo 258 00:11:22,340 --> 00:11:23,360 la variable 259 00:11:23,360 --> 00:11:25,879 pues ahora en el inputActions 260 00:11:25,879 --> 00:11:28,240 en la wake, le digo 261 00:11:28,240 --> 00:11:29,259 inputActions 262 00:11:29,259 --> 00:11:31,600 veremos que es bastante repetitivo 263 00:11:31,600 --> 00:11:33,019 este método, este sistema, pero 264 00:11:33,019 --> 00:11:35,759 una vez que lo hemos hecho una vez, hasta podemos repetirlo 265 00:11:35,759 --> 00:11:36,779 para otros códigos 266 00:11:36,779 --> 00:11:39,340 inputActions, player 267 00:11:39,340 --> 00:11:41,679 move, que había creado 268 00:11:41,679 --> 00:11:43,740 una acción llamada move, que era un vector2 269 00:11:43,740 --> 00:11:46,039 no le voy a decir 270 00:11:46,039 --> 00:11:47,299 starten, no me interesa 271 00:11:47,299 --> 00:11:49,960 recibir cuando empieza 272 00:11:49,960 --> 00:11:51,100 a recibir esa entrada 273 00:11:51,100 --> 00:11:53,659 no, me interesa mientras la esté moviendo 274 00:11:53,659 --> 00:11:55,960 eso es 275 00:11:55,960 --> 00:11:56,500 perform 276 00:11:56,500 --> 00:11:59,000 bien, más igual 277 00:11:59,000 --> 00:12:00,340 y aquí es donde viene lo interesante 278 00:12:00,340 --> 00:12:02,720 necesito un callback, necesito un valor 279 00:12:02,720 --> 00:12:04,799 de retorno, entonces podría 280 00:12:04,799 --> 00:12:06,539 ponerle un guión bajo, no tiene sentido 281 00:12:06,539 --> 00:12:08,600 porque aquí se le suele poner context 282 00:12:08,600 --> 00:12:10,740 es un nombre 283 00:12:10,740 --> 00:12:12,379 que nosotros queramos, pero es verdad que 284 00:12:12,379 --> 00:12:14,720 por convención se suele llamarle context 285 00:12:14,720 --> 00:12:16,639 y es verdad que por convención 286 00:12:16,639 --> 00:12:18,860 se le suele abreviar en ctx 287 00:12:18,860 --> 00:12:20,220 para no escribir tanto 288 00:12:20,220 --> 00:12:23,580 entonces ese es el valor que me va a devolver 289 00:12:23,580 --> 00:12:25,100 igual, mayor que 290 00:12:25,100 --> 00:12:29,320 la misma sintaxis, pero ahora, atentos, le tengo que decir 291 00:12:29,320 --> 00:12:32,139 mi variable move 292 00:12:32,139 --> 00:12:37,000 es igual a, me vas a ir a ese 293 00:12:37,000 --> 00:12:40,580 callback que acabas de crear y vas a leer su 294 00:12:40,580 --> 00:12:44,980 valor. Y entre menor y mayor que, tenemos que decirle 295 00:12:44,980 --> 00:12:47,899 qué tipo de valor va a devolver. Y en este caso es un vector 2. 296 00:12:50,440 --> 00:12:53,519 Esa es la sintaxis. Un poco farragosa, pero 297 00:12:53,519 --> 00:12:55,080 ese es 298 00:12:55,080 --> 00:12:58,039 ahora mismo move valdrá lo que me dé 299 00:12:58,039 --> 00:13:00,080 el joystick, pero antes de comprobarlo 300 00:13:00,080 --> 00:13:02,039 sé que va a funcionar, pero antes de comprobarlo 301 00:13:02,039 --> 00:13:04,159 está recogiendo ese valor y funciona 302 00:13:04,159 --> 00:13:05,779 pero cuando suelte el joystick 303 00:13:05,779 --> 00:13:08,039 se va a quedar en el último valor 304 00:13:08,039 --> 00:13:09,879 recogido, con lo cual nos va a ocurrir que 305 00:13:09,879 --> 00:13:11,600 de repente estamos moviendo el personaje 306 00:13:11,600 --> 00:13:14,080 suelto el joystick y el personaje se sigue moviendo 307 00:13:14,080 --> 00:13:16,120 ¿por qué? porque se ha quedado en el último 308 00:13:16,120 --> 00:13:17,960 valor que tenía en ese momento 309 00:13:17,960 --> 00:13:20,120 cuando lo solté, por eso para evitarlo 310 00:13:20,120 --> 00:13:22,039 tenemos que decirle, voy a escribir todo el tirón 311 00:13:22,039 --> 00:13:23,279 input actions 312 00:13:23,279 --> 00:13:24,820 player move 313 00:13:24,820 --> 00:13:27,179 cuando dejes de recibir 314 00:13:27,179 --> 00:13:29,120 datos, es decir, en cancel 315 00:13:29,120 --> 00:13:31,019 más igual 316 00:13:31,019 --> 00:13:33,000 ahora no necesito un callback porque veremos 317 00:13:33,000 --> 00:13:34,279 que no necesito un valor de vuelta 318 00:13:34,279 --> 00:13:36,580 le tengo que decir cuando sueltes el joystick 319 00:13:36,580 --> 00:13:37,980 move es igual a 320 00:13:37,980 --> 00:13:40,100 en este caso es vector 2 321 00:13:40,100 --> 00:13:43,440 0, es decir, un vector que valga 0, 0, 0 322 00:13:43,440 --> 00:13:44,960 si fuese un float le diría 323 00:13:44,960 --> 00:13:46,639 que ese valor es 0 324 00:13:46,639 --> 00:13:48,879 es decir, en caso de ser un axis le diría 325 00:13:48,879 --> 00:13:50,980 que ese float, como lo haya llamado 326 00:13:50,980 --> 00:13:53,000 el walk, por ejemplo, valdría 0 327 00:13:53,000 --> 00:13:57,320 Igual a 0. Pero en este caso es un vector 2, así que le tengo que decir que es vector 2, 0. 328 00:13:58,179 --> 00:14:00,919 Bueno, y estoy tan seguro de que esto va a funcionar 329 00:14:00,919 --> 00:14:04,139 que para comprobarlo, ni bug ni nada. 330 00:14:04,500 --> 00:14:11,059 Directamente voy a crear en el update y le voy a decir que 331 00:14:11,059 --> 00:14:16,350 muévete hacia adelante 332 00:14:16,350 --> 00:14:27,730 por time delta time, por, muy importante, 333 00:14:29,110 --> 00:14:32,289 lo que me diga move, pero atentos, que era un vector 2. 334 00:14:32,289 --> 00:14:35,029 no es un float, si fuese un eje sí sería un float 335 00:14:35,029 --> 00:14:37,490 es un vector 2, así que será su eje 336 00:14:37,490 --> 00:14:41,409 y lo mismo 337 00:14:41,409 --> 00:14:43,889 le diré, muévete a la derecha 338 00:14:43,889 --> 00:14:48,559 por time delta time, porque es cinemático 339 00:14:48,559 --> 00:14:51,500 y lo que me devuelvas en tu eje, x 340 00:14:51,500 --> 00:14:58,450 vale, comprobémoslo, ahí está 341 00:14:58,450 --> 00:15:01,889 para adelante, para atrás, derecha 342 00:15:01,889 --> 00:15:04,750 izquierda, y movimiento 343 00:15:04,750 --> 00:15:10,250 No le he dado ninguna velocidad, así que como me devuelve vectores normalizados, se está moviendo a un metro por segundo. 344 00:15:11,210 --> 00:15:13,009 Pero bueno, eso ya es de otro capítulo. 345 00:15:13,769 --> 00:15:14,210 Repasando. 346 00:15:14,649 --> 00:15:16,269 Hemos creado una clase, aquí lo vemos. 347 00:15:18,460 --> 00:15:27,039 Con esa clase que hemos creado y que tiene el mismo nombre que el archivo, hemos creado una instancia y en el Awake hemos generado esa instancia. 348 00:15:27,320 --> 00:15:34,899 Antes de continuar, debemos asegurarnos que en Enable esa instancia se active y en Disable esa instancia se desactive. 349 00:15:36,059 --> 00:15:45,559 Y a partir de ahí, en el Awake, podemos llamar a cualquiera de sus mapas de acciones y a cualquiera de sus acciones de tres formas. 350 00:15:45,720 --> 00:15:49,340 Cuando empiezan, cuando se ejecutan y cuando dejan de ejecutarse. 351 00:15:49,740 --> 00:15:58,419 Y con eso, mediante esta sintaxis, o bien llamar a un método, o bien abrir unas llaves y meter código dentro, 352 00:15:58,419 --> 00:16:05,899 o bien, cuando queremos que nos devuelva un valor, crear una variable que será su callback, es decir, lo que devuelve, 353 00:16:06,059 --> 00:16:16,460 Y darle ese callback mediante el read value a la variable que nosotros queramos, que obviamente tiene que ser del mismo tipo que la acción que hemos creado.