1 00:00:07,019 --> 00:00:13,980 Bueno, vayamos a por el segundo método que tenemos que para trasladar los inputs que hemos creado en nuestro InputAsset a código. 2 00:00:14,519 --> 00:00:17,960 Este es el que veremos que ha utilizado mucho en la documentación de Unity. 3 00:00:18,100 --> 00:00:22,379 Voy a pensar que es el oficial, aunque insisto, es tan válido como el que acabamos de ver. 4 00:00:22,940 --> 00:00:23,940 Para ello, vamos a ello. 5 00:00:24,739 --> 00:00:33,100 Lo primero que tenemos que saber es que para usar este método en nuestro código tenemos que utilizar una librería nueva, 6 00:00:33,340 --> 00:00:36,179 es decir, la UnityEngineInputSystem. 7 00:00:36,960 --> 00:00:40,719 Bueno, que sepamos que para lo que voy a usar ahora no necesito esta clase. 8 00:00:40,859 --> 00:00:44,700 Es decir, que antes la opción de crear una clase a partir de este inputAsset 9 00:00:44,700 --> 00:00:46,399 no lo necesitamos para este método. 10 00:00:46,560 --> 00:00:50,140 No lo voy a quitar para que no me surjan errores, pero que no lo necesitamos. 11 00:00:50,320 --> 00:00:55,079 Bien, lo primero que tenemos que hacer es vincularlo con el assets de entradas 12 00:00:55,079 --> 00:00:56,340 que hemos creado con las acciones. 13 00:00:56,539 --> 00:00:59,320 Y para eso lo voy a crear público, aunque valdría también ser realizado, 14 00:00:59,820 --> 00:01:03,359 un inputActionAsset. 15 00:01:03,359 --> 00:01:09,060 es decir, un asset con el mapeo de acciones 16 00:01:09,060 --> 00:01:12,480 le voy a llamar inputActions, que es lo que me sugiere 17 00:01:12,480 --> 00:01:15,480 y me parece correcto, y me voy a Unity 18 00:01:15,480 --> 00:01:20,230 y me voy a mi personaje 19 00:01:20,230 --> 00:01:26,709 le voy a añadir el script que estoy creando 20 00:01:26,709 --> 00:01:30,189 y como podemos ver, me pide 21 00:01:30,189 --> 00:01:33,730 un asset de entradas, ¿cuál? el que ha acabado de crear 22 00:01:33,730 --> 00:01:35,010 este, el mío. 23 00:01:36,590 --> 00:01:36,750 Bien. 24 00:01:38,370 --> 00:01:39,590 Ahora, muy importante, 25 00:01:39,930 --> 00:01:41,969 para que esto funcione, por favor, que nadie se lo olvide, 26 00:01:42,150 --> 00:01:44,250 para que esto funcione, como he comentado 27 00:01:44,250 --> 00:01:46,250 antes, el input que voy 28 00:01:46,250 --> 00:01:48,269 a usar tiene que estar vinculado 29 00:01:48,269 --> 00:01:50,310 con el Project Wide. Que os recuerdo, 30 00:01:50,430 --> 00:01:52,170 esto es un recordatorio, que antes en 31 00:01:52,170 --> 00:01:54,230 Edit Project Settings, en el Input Manager, 32 00:01:55,129 --> 00:01:56,209 vimos que aquí había 33 00:01:56,209 --> 00:01:58,090 uno vinculado, el Project Wide Actions, 34 00:01:58,569 --> 00:02:00,269 que es un poco como el que usa por defecto. 35 00:02:00,629 --> 00:02:01,829 Bien, está vinculado el que venía 36 00:02:01,829 --> 00:02:04,950 suyo, el que ya creó el Unity 37 00:02:04,950 --> 00:02:07,810 al crear el proyecto. Y os recuerdo también que 38 00:02:07,810 --> 00:02:09,990 nosotros al crear uno, aquí 39 00:02:09,990 --> 00:02:13,849 nos aparecía este aviso, nuestra alerta. Decía, este no es 40 00:02:13,849 --> 00:02:16,789 el Project White. Y tenemos aquí un atajo para asignarlo. 41 00:02:17,030 --> 00:02:19,849 Si lo pincho, esa alerta ya desaparece. Insisto, 42 00:02:20,250 --> 00:02:22,729 no nos olvidemos de esto porque el anterior método no necesitaba este 43 00:02:22,729 --> 00:02:25,750 paso, pero este sí. Bueno, pues igual que 44 00:02:25,750 --> 00:02:28,810 nos pasaba en el anterior método, tenemos que activarlo y desactivarlo 45 00:02:28,810 --> 00:02:33,330 cuando el objeto que contiene este script 46 00:02:33,330 --> 00:02:34,889 se activa o se desactiva. 47 00:02:35,509 --> 00:02:36,710 Entonces, volvemos a lo mismo. 48 00:02:37,050 --> 00:02:37,490 OnEnable. 49 00:02:37,969 --> 00:02:40,949 Vamos a nuestro input asset que acabamos de crear 50 00:02:40,949 --> 00:02:44,629 y utilizaremos el FindActionMap. 51 00:02:45,629 --> 00:02:47,590 Es decir, búscame un mapa de acciones. 52 00:02:47,770 --> 00:02:47,990 ¿Por qué? 53 00:02:48,050 --> 00:02:49,189 Porque ese mapa de acciones, 54 00:02:49,189 --> 00:02:53,050 le metemos entre comillas el nombre. 55 00:02:54,750 --> 00:02:55,930 Yo le he llamado Player, 56 00:02:56,069 --> 00:02:57,210 igual que tengo un UI, 57 00:02:57,469 --> 00:02:58,370 también tengo uno de Player. 58 00:02:58,810 --> 00:03:01,530 Y lo que tenemos que hacer es, efectivamente, activarlo. 59 00:03:02,110 --> 00:03:07,490 Es decir, no hacíamos como en el anterior que activábamos todo el sistema de entradas. 60 00:03:07,629 --> 00:03:09,490 No, aquí vamos a un mapa de acciones en concreto. 61 00:03:10,750 --> 00:03:11,830 En este caso el de player. 62 00:03:12,409 --> 00:03:13,990 Y lo mismo, onDisable. 63 00:03:16,129 --> 00:03:18,710 Me voy a ese input asset. 64 00:03:19,189 --> 00:03:21,009 Búscame un mapa de acciones. 65 00:03:21,409 --> 00:03:22,289 ¿Cuál? El de player. 66 00:03:25,830 --> 00:03:26,669 Y disable. 67 00:03:26,669 --> 00:03:32,330 Es un buen momento para comentar que esto que acabo de hacer 68 00:03:32,330 --> 00:03:36,469 lo podemos aplicar incluso en el sistema anterior 69 00:03:36,469 --> 00:03:39,590 y tiene una utilidad muy interesante, que es la de 70 00:03:39,590 --> 00:03:43,009 yo puedo acceder a un asset de entradas, 71 00:03:43,530 --> 00:03:46,770 yo puedo acceder a un mapa de acciones y puedo activarlos y desactivarlos. 72 00:03:46,770 --> 00:03:51,090 No tiene por qué ser cuando el objeto se active en la escena o se desactive. 73 00:03:51,289 --> 00:03:54,509 Puede ser incluso, pensemos, cuando yo ejecuto un menú de pausa, 74 00:03:54,509 --> 00:03:56,689 yo puedo lanzar un menú de pausa y decirle 75 00:03:56,689 --> 00:03:59,449 búscame el mapa de acciones de player y desactívalo 76 00:03:59,449 --> 00:04:01,289 ¿por qué? porque mientras esté en pausa 77 00:04:01,289 --> 00:04:02,830 no quiero que el usuario pueda 78 00:04:02,830 --> 00:04:04,689 disparar, saltar o moverse 79 00:04:04,689 --> 00:04:07,310 así que que sepamos que las acciones, los mapas de acciones 80 00:04:07,310 --> 00:04:09,189 los puedo desactivar o desactivar en cualquier momento 81 00:04:09,189 --> 00:04:11,629 utilizando la técnica que acabamos de ver 82 00:04:11,629 --> 00:04:13,389 lo que viene ahora es que tenemos que 83 00:04:13,389 --> 00:04:15,509 vincular las acciones 84 00:04:15,509 --> 00:04:16,350 con variables 85 00:04:16,350 --> 00:04:19,170 ¿con qué variables? con unas variables de tipo 86 00:04:19,170 --> 00:04:20,790 input action 87 00:04:20,790 --> 00:04:23,310 y yo por ejemplo le voy a vincular con 88 00:04:23,310 --> 00:04:29,410 la de saltar, jump, lo voy a llamar jump action para indicarle que es la acción de saltar y puedo 89 00:04:29,410 --> 00:04:35,310 crear incluso una que sea pues la de en este caso va a ser la de caminar no va a ser un vector 2 90 00:04:35,310 --> 00:04:43,709 sino un eje como cree previamente y ahora en el awake tenemos que vincular esas variables que 91 00:04:43,709 --> 00:04:50,370 acabamos de crear con la acción de la set de entradas muy bien pues por ejemplo el jump action 92 00:04:50,370 --> 00:04:55,529 lo voy a vincular utilizando la clase InputSystem 93 00:04:55,529 --> 00:04:58,110 para la cual he importado la librería que necesitaba. 94 00:04:58,370 --> 00:05:02,769 Y dentro de esa clase existen las acciones 95 00:05:02,769 --> 00:05:06,110 y dentro de las acciones está el método FindAction. 96 00:05:07,209 --> 00:05:08,889 Y tiene el nombre que le hayamos dado. 97 00:05:09,170 --> 00:05:10,610 En mi caso se llamaba Jump. 98 00:05:12,189 --> 00:05:12,730 Ahí lo tenéis. 99 00:05:13,649 --> 00:05:14,350 Y lo mismo Walk. 100 00:05:14,829 --> 00:05:17,129 La variable WalkAction que había creado 101 00:05:17,129 --> 00:05:19,230 es, utiliza 102 00:05:19,230 --> 00:05:21,050 la clase 103 00:05:21,050 --> 00:05:21,750 inputSystem 104 00:05:21,750 --> 00:05:25,310 vete a tus acciones y busca 105 00:05:25,310 --> 00:05:27,209 una acción llamada 106 00:05:27,209 --> 00:05:28,509 y el nombre que le hayamos dado 107 00:05:28,509 --> 00:05:31,250 bien, y esto lo hemos hecho en el awake de forma que 108 00:05:31,250 --> 00:05:33,370 ya están vinculadas, ahora, ¿qué hacer con ellas? 109 00:05:33,730 --> 00:05:34,649 pues es lo que vamos a ver 110 00:05:34,649 --> 00:05:37,149 pues bien, esto se 111 00:05:37,149 --> 00:05:39,389 asemeja un poco más al antiguo inputSystem 112 00:05:39,389 --> 00:05:41,250 por eso los nostálgicos a lo mejor 113 00:05:41,250 --> 00:05:42,850 lo encuentran más cómodo, porque 114 00:05:42,850 --> 00:05:44,449 a partir de ahora se llama 115 00:05:44,449 --> 00:05:47,949 en el update. Es decir, en el update tengo que comprobar en todo momento 116 00:05:47,949 --> 00:05:52,129 si esas acciones que acabo de vincular se están presionando 117 00:05:52,129 --> 00:05:55,470 o se han dejado de presionar. ¿Y cómo se hace eso? Pues con 118 00:05:55,470 --> 00:05:58,470 if jumpAction 119 00:05:58,470 --> 00:06:06,089 tiene un método que es watchPresetThisFrame 120 00:06:06,089 --> 00:06:08,750 que devuelve una booleana 121 00:06:08,750 --> 00:06:13,649 true si es que sí y false si es que no. Que es lo mismo que 122 00:06:13,649 --> 00:06:16,990 utilizábamos en el antiguo Input System para detectar si habían pulsado un botón. 123 00:06:17,709 --> 00:06:23,480 Entonces le voy a poner, muéstrame, salto. E igual que tenemos 124 00:06:23,480 --> 00:06:26,420 el si se ha presionado, tenemos 125 00:06:26,420 --> 00:06:30,879 si jump action is preset 126 00:06:30,879 --> 00:06:37,779 que significa lo están presionando en este momento. 127 00:06:37,779 --> 00:06:41,259 Y va a mandar algo a la consola que va a decir estoy 128 00:06:41,259 --> 00:06:47,009 saltando. Y lo mismo, también tenemos 129 00:06:47,009 --> 00:06:50,050 if jumpAction 130 00:06:50,050 --> 00:06:51,970 was 131 00:06:51,970 --> 00:06:52,910 released 132 00:06:52,910 --> 00:06:57,980 this frame, voy a mandar 133 00:06:57,980 --> 00:06:58,500 a la consola 134 00:06:58,500 --> 00:07:01,819 he dejado de saltar 135 00:07:01,819 --> 00:07:03,660 resumiendo 136 00:07:03,660 --> 00:07:05,920 tenemos aquí en el update 137 00:07:05,920 --> 00:07:08,180 han presionado este botón 138 00:07:08,180 --> 00:07:09,779 en este fotograma, en ese caso 139 00:07:09,779 --> 00:07:11,959 dime esto, siguen 140 00:07:11,959 --> 00:07:13,819 presionándolo en este fotograma 141 00:07:13,819 --> 00:07:15,939 en ese caso dime esto, y si dejan 142 00:07:15,939 --> 00:07:17,300 de presionarlo, dime esto 143 00:07:17,300 --> 00:07:19,660 vale, se lo doy a guardar 144 00:07:19,660 --> 00:07:20,720 voy a colapsar 145 00:07:20,720 --> 00:07:23,920 la consola, porque ahora en cuanto le doy al play 146 00:07:23,920 --> 00:07:25,439 si todo va bien 147 00:07:25,439 --> 00:07:26,259 que espero que sí 148 00:07:26,259 --> 00:07:28,560 lo tenía vinculado con la tecla A 149 00:07:28,560 --> 00:07:30,540 recuerdo que eso lo hemos hecho con el input asset 150 00:07:30,540 --> 00:07:32,759 que es súper cómodo, si le doy al A 151 00:07:32,759 --> 00:07:35,720 efectivamente me dice que salto 152 00:07:35,720 --> 00:07:37,180 una vez, lo vemos ahí 153 00:07:37,180 --> 00:07:39,879 pero sin embargo estoy saltando, me lo dice en cada fotograma 154 00:07:39,879 --> 00:07:40,939 y si suelto 155 00:07:40,939 --> 00:07:43,439 me dice efectivamente que ha dejado 156 00:07:43,439 --> 00:07:45,180 de saltar, es decir, funciona 157 00:07:45,180 --> 00:07:46,939 sigamos ordenados 158 00:07:46,939 --> 00:07:51,639 vale, ya está todo organizadito 159 00:07:51,639 --> 00:07:53,139 ahora 160 00:07:53,139 --> 00:07:55,220 igual que hemos vinculado la acción 161 00:07:55,220 --> 00:07:57,220 de jumpAction, hemos vinculado 162 00:07:57,220 --> 00:07:59,300 la de walk, que recuerdo que era un 163 00:07:59,300 --> 00:08:01,240 value, era un axis, no era 164 00:08:01,240 --> 00:08:03,240 un vector2, lo que necesito es 165 00:08:03,240 --> 00:08:05,079 asignar lo que devuelva esa acción 166 00:08:05,079 --> 00:08:07,139 a una variable, y en este caso va a ser 167 00:08:07,139 --> 00:08:08,259 una variable de tipo float 168 00:08:08,259 --> 00:08:12,579 le voy a llamar walk 169 00:08:12,579 --> 00:08:16,829 ahora sí, y 170 00:08:16,829 --> 00:08:19,209 esto es relativamente fácil 171 00:08:19,209 --> 00:08:21,529 porque ahora lo único que voy a hacer es decirle 172 00:08:21,529 --> 00:08:25,009 la variable que has creado, que insisto, tiene que ser 173 00:08:25,009 --> 00:08:26,769 del mismo tipo que la acción 174 00:08:26,769 --> 00:08:28,930 que el input que hemos creado, en este caso es un 175 00:08:28,930 --> 00:08:30,569 float, va a ser 176 00:08:30,569 --> 00:08:32,889 busca 177 00:08:32,889 --> 00:08:35,230 esa acción que he vinculado 178 00:08:35,230 --> 00:08:36,070 aquí 179 00:08:36,070 --> 00:08:40,269 y esto es muy parecido al anterior 180 00:08:40,269 --> 00:08:42,230 sistema porque le voy a dar un read value 181 00:08:42,230 --> 00:08:44,330 es decir 182 00:08:44,330 --> 00:08:46,529 lee el callback que está leyendo 183 00:08:46,529 --> 00:08:48,230 ese input y asígnaselo 184 00:08:48,230 --> 00:08:50,470 a esa variable y para comprobar que funciona 185 00:08:50,470 --> 00:08:52,289 ya que 186 00:08:52,289 --> 00:08:54,809 estamos en el update, le voy a decir transform translate 187 00:08:54,809 --> 00:09:03,159 hacia adelante por walk, venga, y muy 188 00:09:03,159 --> 00:09:06,860 importante, como estamos en movimiento cinemático, por time, delta time 189 00:09:06,860 --> 00:09:15,320 ahí está, oh no, me he confundido y 190 00:09:15,320 --> 00:09:19,539 lo he asignado al eje X y yo lo quería asignar al eje Y, no pasa nada 191 00:09:19,539 --> 00:09:23,580 diré que lo he hecho adrede, no es así, pero me sirve para indicar lo rápido que es 192 00:09:23,580 --> 00:09:27,659 y lo fácil que es decirle, oye, que la acción walk lo has vinculado con el eje X 193 00:09:27,659 --> 00:09:56,820 No pasa nada. Le doy Listen. Muevo el eje hacia arriba. Le digo que lo vincule con el eje Y. Lo guardo. Y el otro también. Oye, el negativo y positivo lo has vinculado con el Left. Pues no, con el Down. Y el positivo con el Up. Guardo el Asset. Me voy a Unity. Le doy al Play. Y ahora está vinculado al eje Y. Para adelante, para atrás. Y a los cursores para adelante, para atrás. 194 00:09:57,659 --> 00:10:13,879 Bien, puede parecer muy farragoso todo esto, pero por regla general lo hacemos una vez o por lo menos lo hacemos una vez de forma incómoda y a partir de ahí lo que hacemos es reutilizar un mismo script que hemos creado para otros proyectos. 195 00:10:14,480 --> 00:10:16,580 Y nos queda un tercero. Vamos a por él.