1 00:00:13,169 --> 00:00:19,149 Nos adentramos en uno de los terrenos que más posibilidades nos va a dar a la hora de afrontar nuestros productos interactivos 2 00:00:19,149 --> 00:00:27,989 porque estoy hablando de la interactividad precisamente, de cómo Unity recoge las acciones que hace el usuario 3 00:00:27,989 --> 00:00:30,850 y las interpreta y actúa en consecuencia. 4 00:00:31,670 --> 00:00:37,770 Obviamente es uno de los parámetros básicos a la hora de hacer un producto interactivo porque si no, no sería interactivo. 5 00:00:38,329 --> 00:00:43,009 Lo primero que voy a hacer es crear un empty object y a él le voy a asociar un script. 6 00:00:46,570 --> 00:00:50,270 Lo voy a llamar interactivity, por ejemplo, para indicar lo que es. 7 00:00:50,829 --> 00:00:57,590 Y ahora, al abrirlo, lo primero que tenemos que tener en cuenta es que toda la función de comienzo no me interesa. 8 00:00:58,030 --> 00:01:05,730 ¿Por qué? Porque obviamente no tengo tanto interés en saber qué tecla está pulsando el usuario cuando se lanza el script, 9 00:01:06,069 --> 00:01:10,269 sino qué va a pulsar o qué va a hacer durante la ejecución del videojuego. 10 00:01:10,489 --> 00:01:18,510 Por eso, donde me voy a mover principalmente es en la función de update, que va a estar en todo momento comprobando si algo se está ejecutando. 11 00:01:19,189 --> 00:01:28,609 Bien, lo que tenemos que saber es que todo lo que tenga que ver con entradas desde algún dispositivo de input, pues lo maneja el método input, como no podía ser de otra forma. 12 00:01:28,609 --> 00:01:45,250 Y es un buen momento para recordar que no está de más nunca ir a la página de referencia de Unity donde están todos los métodos reflejados y no solo eso, sino también sus propiedades y sus métodos públicos. 13 00:01:45,390 --> 00:01:49,730 Es decir, que aquí tenéis todo lo que vamos a ver, bueno, y por supuesto más. 14 00:01:50,129 --> 00:01:55,049 Pero vamos a ver las funciones básicas que encontramos en el método input, por ejemplo. 15 00:01:55,049 --> 00:02:00,799 una de las más básicas es detectar si se está pulsando alguna tecla del teclado 16 00:02:00,799 --> 00:02:05,980 bien, es el get keydown y ahí le tenemos que pasar el código de una tecla 17 00:02:05,980 --> 00:02:10,840 el código de las teclas lo podemos obtener a través del keycode 18 00:02:10,840 --> 00:02:12,719 que tiene a su vez un montón de atributos 19 00:02:12,719 --> 00:02:18,500 y como podéis ver, nos aparecerán aquí cientos de teclas disponibles 20 00:02:18,500 --> 00:02:23,000 entonces si las escribimos, por ejemplo esta se corresponde con la barra espaciadora 21 00:02:23,000 --> 00:02:39,599 Lo que hace esto realmente es devolver true, porque es una booleana, si se está pulsando, y si no se pulsa, un false, con una peculiaridad que la vamos a descubrir ahora mismo. 22 00:02:39,599 --> 00:02:58,090 Así que si yo le pregunto en un if y le paso esta sentencia, todo eso, lo que estoy haciendo es comprobar en cada fotograma, recordad que estamos en el update, en cada fotograma le estoy preguntando si están pulsando esta tecla. 23 00:02:58,090 --> 00:02:59,810 vamos a comprobarlo 24 00:02:59,810 --> 00:03:04,169 esto es la barra espaciadora 25 00:03:04,169 --> 00:03:07,330 vamos a comprobarlo 26 00:03:07,330 --> 00:03:09,430 y de hecho me voy a sacar aquí un tecladito 27 00:03:09,430 --> 00:03:10,210 para que veáis 28 00:03:10,210 --> 00:03:12,909 lanzo el juego y como podemos ver 29 00:03:12,909 --> 00:03:14,009 en la consola no hay nada 30 00:03:14,009 --> 00:03:16,930 pero si yo pulso la barra espaciadora 31 00:03:16,930 --> 00:03:19,250 ahí aparece, se está pulsando la barra espaciadora 32 00:03:19,250 --> 00:03:21,870 pero quiero que nos fijemos en algo 33 00:03:21,870 --> 00:03:23,990 si dejo la barra espaciadora pulsada 34 00:03:23,990 --> 00:03:26,349 solo aparece una vez 35 00:03:26,349 --> 00:03:29,330 si la levanto y la vuelvo a pulsar 36 00:03:29,330 --> 00:03:30,490 vuelve otra vez a aparecer 37 00:03:30,490 --> 00:03:32,810 porque esa es una de las características 38 00:03:32,810 --> 00:03:34,469 del GetCadeDown 39 00:03:34,469 --> 00:03:36,969 que lanza True si detecta 40 00:03:36,969 --> 00:03:37,990 que se ha pulsado esa tecla 41 00:03:37,990 --> 00:03:41,090 pero no vuelve a ponerse en False 42 00:03:41,090 --> 00:03:42,750 hasta que levanto el dedo 43 00:03:42,750 --> 00:03:44,030 de la barra espaciadora 44 00:03:44,030 --> 00:03:46,150 con lo cual lanza una vez un True 45 00:03:46,150 --> 00:03:47,689 y hasta que no lo vuelva a pulsar 46 00:03:47,689 --> 00:03:51,090 no vuelve a lanzarse 47 00:03:51,090 --> 00:03:53,009 ahora mismo me interesa más 48 00:03:53,009 --> 00:03:54,569 que entendamos 49 00:03:54,569 --> 00:03:57,490 que igual que existe el GetCadeDown 50 00:03:57,490 --> 00:04:09,750 Pues existe, por ejemplo, el Get Mouse Button Down, que es exactamente lo mismo, solo que refiriéndose al ratón. 51 00:04:09,849 --> 00:04:14,270 Y fijaros que aquí me está pidiendo un número entero. ¿Por qué? 52 00:04:14,469 --> 00:04:21,389 Porque aquí lo que me está pidiendo es un 0 para el botón izquierdo, un 1 para el botón derecho, un 2. 53 00:04:21,389 --> 00:04:36,569 Vamos a comprobarlo. Le voy a preguntar si se pulsa el botón 1 del ratón, lance a consola, se está haciendo left mouse click. 54 00:04:36,769 --> 00:04:41,360 Es decir, que está andando al botón izquierdo del ratón. 55 00:04:42,540 --> 00:04:50,980 Bueno, perdón que le he puesto el 1. No debemos olvidarnos que los programadores empiezan a contar en 0, así que el 0 es el botón izquierdo del ratón. 56 00:04:50,980 --> 00:05:04,129 Lo voy a guardar, lo lanzo y ahora atentos porque si le hago clic fuera de la ventana me estoy saliendo del juego y por lo tanto no lo detectará. 57 00:05:04,250 --> 00:05:07,850 Tengo que hacer clic pero dentro de la ventana de juego para que me detecte ese clic. 58 00:05:08,629 --> 00:05:09,009 Y ahí está. 59 00:05:11,360 --> 00:05:16,740 Y pasa exactamente igual que con la barra espaciadora, solo detecta una vez hasta que lo levanto y lo vuelvo a pulsar. 60 00:05:16,740 --> 00:05:29,569 Ya que estamos, igual que tenemos GetMouseButtonDown y demás, pues también incluso tenemos otra opción que es el GetButtonDown. 61 00:05:29,990 --> 00:05:42,949 Y aquí ¿qué me está pidiendo? Como podemos ver, un string. Es decir, no un código ni un número entero, sino una cadena. 62 00:05:42,949 --> 00:05:51,209 Aquí se refiere a un nombre. Por ejemplo, aquí le voy a escribir Fire 1 y le voy a decir que mande a consola. 63 00:05:53,480 --> 00:06:09,769 Print. Se ha disparado. Voy a lanzar el juego. Pues bien, y le estoy dando a un botón de mi joystick. 64 00:06:13,720 --> 00:06:17,019 Y como podemos ver, se está detectando en la consola. 65 00:06:17,019 --> 00:06:28,040 Bien, y ahora viene la pregunta, ¿y dónde le he dicho yo que este código, esta palabra, se refiere a ese botón? 66 00:06:28,480 --> 00:06:41,500 Pues vamos a una de las ventanas que tenemos que conocer si queremos manejar la interactividad que tenemos en Edit, Project Settings, y aquí tenemos la opción de Input Manager, 67 00:06:41,500 --> 00:06:50,420 donde configuramos todas las opciones que hay o todas las posibilidades de entrada que hay a la hora de pulsar. 68 00:06:50,420 --> 00:06:55,459 Lo que tenemos que entender es que la primera de las opciones que hemos dado, que le hemos dicho un código de tecla, 69 00:06:55,720 --> 00:07:03,720 son códigos que ya están vinculados dentro de Unity, pero eso no es muy práctico porque imaginaros que queremos que una misma acción, 70 00:07:03,819 --> 00:07:09,459 por ejemplo un disparo, esté asociado a varias teclas. En ese caso, y además no quiero llamarlo por un código, 71 00:07:09,459 --> 00:07:13,459 sino que quiero llamarlo a través de una palabra que me sea mucho más fácil, digamos, identificarlo. 72 00:07:14,000 --> 00:07:20,360 Para eso existe el Input Manager, donde podemos crear tantos palabras o tantos códigos de entrada 73 00:07:20,360 --> 00:07:23,459 mediante cadenas de texto que luego vincularemos con entradas. 74 00:07:24,120 --> 00:07:31,759 Vamos a verlo en la ventana. Por ejemplo, fijaros que el Fire 1, que ya viene por defecto, 75 00:07:31,860 --> 00:07:38,279 pero podemos crear más porque yo le puedo dar con el botón derecho, duplicarlo y cambiarle el nombre 76 00:07:38,279 --> 00:07:44,579 y decirle que esto es fuego. Entonces, bueno, que sepáis que podemos crear aquí más elementos 77 00:07:44,579 --> 00:07:51,779 aparte de los que hay, pero el caso es que este fire1 se corresponde con el nombre que yo le he dado aquí 78 00:07:51,779 --> 00:07:59,560 y que aquí le dicen negativeButton y positiveButton. ¿Qué significa? 79 00:08:00,000 --> 00:08:03,759 El negativo y el positivo lo entenderemos mucho mejor cuando veamos los ejes, 80 00:08:03,759 --> 00:08:07,319 en el que decimos que uno es para hacia un lado y otro es para el otro. 81 00:08:07,319 --> 00:08:15,319 En cualquier caso, le voy a decir que cuando yo pulse el joystick button 16, se ejecuta. 82 00:08:16,139 --> 00:08:17,839 ¿Y cuál es el joystick button 16? 83 00:08:18,139 --> 00:08:18,879 Pues bueno, en fin. 84 00:08:19,339 --> 00:08:22,000 Pues bien, existe mucha documentación en internet al respecto, 85 00:08:22,139 --> 00:08:27,579 donde podemos encontrar códigos que existen tanto para los controladores en PC como en Mac, 86 00:08:28,040 --> 00:08:31,300 y donde yo puedo ver que efectivamente el botón que acabo de pulsar, que es el A, 87 00:08:31,879 --> 00:08:35,679 se corresponde con el joystick button 16. 88 00:08:35,980 --> 00:08:37,220 Esto porque es mi Mac. 89 00:08:37,320 --> 00:08:42,000 Pero si lo hacemos en PC, el botón A se corresponderá con el joystick botón 0. 90 00:08:42,700 --> 00:08:51,559 Y si quiero incluso decirle que otro botón también dispare, por ejemplo, el mouse, le voy a decir el mouse 1, 91 00:08:51,559 --> 00:08:57,350 que se corresponde con el botón derecho, pues lo vamos a comprobar. 92 00:08:58,450 --> 00:08:58,929 Cierro. 93 00:09:00,029 --> 00:09:08,090 Y si lanzo la partida, pues tendré asociado el disparo no solo al botón del gamepad, sino también... 94 00:09:08,090 --> 00:09:10,710 Ahí está, le estoy dando al botón derecho de mi ratón. 95 00:09:11,049 --> 00:09:18,230 Pero tenemos la limitación que hemos visto antes, que es que me detecta cuando lo pulso, se pone en True y no se vuelve a poner en False hasta que lo libero. 96 00:09:18,370 --> 00:09:24,210 Pero quiero que, y si quiero que me esté detectando constantemente su pulsación, pues para eso existe otra variante que es el Get Key. 97 00:09:24,210 --> 00:09:37,399 Lo vamos a ver. Voy a borrar todos estos y le voy a decir que si se está dando la situación de Get Key, ¿veis? 98 00:09:37,399 --> 00:09:46,720 y pasándole el nombre de alguna tecla, voy a decirle que si está apretando la tecla Space, 99 00:09:47,340 --> 00:09:49,500 que esta sí que me la reconoce como una cadena de texto. 100 00:09:50,039 --> 00:09:54,480 De hecho, si vamos a la página de Unity con el método K-Code, 101 00:09:54,480 --> 00:09:57,059 ahí nos aparecerán todas las que reconoce. 102 00:09:57,740 --> 00:10:02,480 Por ejemplo, esta que acabo de dar yo es una muy estándar, que es la de la barra espaciadora. 103 00:10:02,620 --> 00:10:03,100 Aquí la tenemos. 104 00:10:05,850 --> 00:10:08,190 Le voy a decir que detecte que se está disparando. 105 00:10:09,230 --> 00:10:18,710 Si lanzo mi juego, efectivamente veremos que si yo pulso la barra espaciadora, no lo detecta una vez. 106 00:10:18,710 --> 00:10:23,389 De hecho, si nos fijamos ahí, veremos que está cada fotograma detectando que se está disparando. 107 00:10:23,450 --> 00:10:27,110 Es decir, que podría lanzar una bala por cada fotograma que pasa. 108 00:10:27,230 --> 00:10:32,190 Y en cuanto levanto, pues lógicamente deja de contar. 769 disparos ha detectado.