1 00:00:08,050 --> 00:00:15,949 Y ahora vamos a una de las funciones más útiles y que, si entendemos, nos dará mucha versatilidad, que es la de GetAxis. 2 00:00:18,579 --> 00:00:27,940 Bien, para entendernos, el GetAxis, y aquí nos pide un nombre de ese eje, y este sí que lo podemos configurar luego en el InputManager, 3 00:00:28,379 --> 00:00:33,979 pero bueno, ya vienen algunos configurados por defecto, por ejemplo el vertical o el horizontal. 4 00:00:33,979 --> 00:00:44,420 Si nos vamos a nuestro Unity, veremos que ya hay algunos configurados, horizontal, vertical, 5 00:00:45,560 --> 00:00:55,920 y que están ya configurados para ser detectados por bien un joystick o por el ratón o por el eje X, en este caso de las teclas. 6 00:00:57,520 --> 00:00:58,700 ¿Y qué hace esto? 7 00:00:58,700 --> 00:01:07,939 Pues devuelve un número entre menos 1 y 1 con todos los decimales entre medio, es decir, devuelve un float. 8 00:01:08,099 --> 00:01:11,239 Lo vamos a comprobar. Le voy a decir directamente nada, sin más. 9 00:01:11,379 --> 00:01:18,250 Le digo que me muestre con un print el valor del getAxis vertical. 10 00:01:22,920 --> 00:01:29,500 Así que si lanzo el juego, veremos que aquí me aparece un 0, porque mientras yo no toque nada, vemos, me está diciendo que 0. 11 00:01:29,500 --> 00:01:31,620 el eje vertical 12 00:01:31,620 --> 00:01:33,939 si le doy a los cursores 13 00:01:33,939 --> 00:01:36,439 vemos que pasa de 0 a 1 14 00:01:36,439 --> 00:01:38,180 si le doy al cursor hacia arriba 15 00:01:38,180 --> 00:01:39,819 pasa de 0 a menos 1 16 00:01:39,819 --> 00:01:41,079 si le doy hacia abajo 17 00:01:41,079 --> 00:01:42,700 o incluso con mi gamepad 18 00:01:42,700 --> 00:01:46,709 si empiezo a mover el joystick 19 00:01:46,709 --> 00:01:49,709 hacia arriba o hacia abajo 20 00:01:49,709 --> 00:01:52,370 efectivamente va pasando de 0 a menos 1 21 00:01:52,370 --> 00:01:55,870 bien, pensemos que 22 00:01:55,870 --> 00:01:57,930 en todas las posibilidades que nos ofrece esto 23 00:01:57,930 --> 00:01:59,969 realmente lo que les estamos diciendo es que 24 00:01:59,969 --> 00:02:06,909 detecte entre un valor de menos uno y uno pasando por cero, 25 00:02:07,629 --> 00:02:09,129 cómo me estoy desplazando en un eje. 26 00:02:09,550 --> 00:02:11,729 Y ese eje lo puedo asociar a teclas. 27 00:02:11,789 --> 00:02:14,969 De hecho, también está asociado el eje vertical a las teclas W y S, 28 00:02:15,370 --> 00:02:17,210 el eje horizontal a las teclas A y D. 29 00:02:18,009 --> 00:02:21,870 Pero si eso yo, ese valor, lo multiplico con un valor de desplazamiento, 30 00:02:22,289 --> 00:02:23,949 pues ya tengo un objeto moviéndose. 31 00:02:23,949 --> 00:02:26,949 Lo vamos a comprobar y veremos lo fácil que es. 32 00:02:26,949 --> 00:02:33,449 Si yo ahora, ahora sí, le voy a añadir un objeto, por ejemplo un cubo, este. 33 00:02:34,449 --> 00:02:45,180 Por cierto, voy a hacer una cosa, voy a alinear la cámara con este objeto, ¿vale? 34 00:02:45,180 --> 00:02:51,259 Ahí tengo la cámara moviendo y perdonadme que vaya a hacer una pequeña trampa, que no es tal, 35 00:02:52,360 --> 00:02:58,530 pero realmente es hacer que la cámara en todo momento siga mi objeto. 36 00:02:58,530 --> 00:03:41,719 Voy a asociarle este script a mi cámara, lo voy a abrir y fijaros lo fácil que es, no es tan fácil, pero si lo que quiero es que un objeto en todo momento esté apuntando hacia otro objeto, pues es tan fácil como crearle una variable de tipo transform, lo voy a llamar pointAt, por ejemplo, y decirle en este caso a la cámara, porque estoy asociado a la cámara, que toTransform y veremos que tiene un método llamado lookAt. 37 00:03:42,319 --> 00:03:48,960 donde le tenemos que decir qué variable tipo transform a la que tiene que mirar. 38 00:03:49,819 --> 00:03:50,719 Obviamente, ¿cuál va a ser? 39 00:03:52,099 --> 00:04:03,120 Me voy a ir a mi Unity, me voy a mi cámara y aquí tengo la variable y voy a arrastrarle ahí, por supuesto, el cubo. 40 00:04:04,360 --> 00:04:08,860 Nada, este pequeño truquillo que lo veremos más adelante es sencillamente para que la cámara ahora mismo 41 00:04:08,860 --> 00:04:15,060 esté en todo momento mirando al cubo y así, bueno, lo pueda mover libremente sin que me desaparezca de la pantalla. 42 00:04:15,479 --> 00:04:19,639 Vamos con el script del cubo. Veamos lo fácil que es. 43 00:04:20,439 --> 00:04:29,660 Si yo a este cubo ya hemos visto que esto me devuelve un número entre 0 y 1 con el eje vertical, 44 00:04:31,720 --> 00:04:43,399 pues bien, si yo le digo a mi cubo que, utilizando el translate que hemos visto antes, 45 00:04:43,399 --> 00:04:45,860 que es un método dentro del método transform 46 00:04:45,860 --> 00:04:50,720 y que me está pidiendo un vector3 47 00:04:50,720 --> 00:04:55,139 pero es que el vector3 lo podemos incluso declarar nosotros mismos 48 00:04:55,139 --> 00:04:58,920 con una de las funciones muy cómodas que tiene 49 00:04:58,920 --> 00:05:00,699 que es por ejemplo que se mueva arriba 50 00:05:00,699 --> 00:05:06,699 pero, y aquí viene lo interesante 51 00:05:06,699 --> 00:05:12,189 y si yo le digo 52 00:05:12,189 --> 00:05:16,819 lo voy a hacer en varias líneas para que quede más claro 53 00:05:16,819 --> 00:05:19,879 y si yo quiero una nueva variable de tipo float 54 00:05:19,879 --> 00:05:32,620 cuyo valor, bueno, que el nombre sea desplazamiento en x, bueno, en este caso en y, lo voy a hacer en minúscula, seamos buenos, 55 00:05:32,620 --> 00:05:41,079 y su valor es lo que me está devolviendo el getaxis, es decir, un número entre menos uno y uno. 56 00:05:41,879 --> 00:05:51,420 Y si yo a este vector 3 lo multiplico por ese valor, recordemos que los vectores se pueden hacer cálculos con ellos, 57 00:05:51,420 --> 00:05:53,079 entre ellos multiplicar por un número 58 00:05:53,079 --> 00:05:55,720 que significa que si lo multiplico por 0 59 00:05:55,720 --> 00:05:58,040 es decir, no toco nada, no se moverá 60 00:05:58,040 --> 00:06:00,839 pero en el momento en el que yo empiece a desplazar el objeto 61 00:06:00,839 --> 00:06:03,100 a desplazar el eje 62 00:06:03,100 --> 00:06:06,220 pues el objeto también se empezará a mover en ese sentido 63 00:06:06,220 --> 00:06:09,199 muy importante, siempre que trabajemos con algo que se desplace 64 00:06:09,199 --> 00:06:16,540 tenemos que también multiplicarlo por time, deltaTime 65 00:06:16,540 --> 00:06:18,639 ahí lo tenemos 66 00:06:18,639 --> 00:06:22,839 añado este script a mi cubo 67 00:06:22,839 --> 00:06:35,089 Y ahora mismo veremos que el cubo, efectivamente, lo muevo con mis cursores. 68 00:06:35,889 --> 00:06:43,490 Y si traigo aquí mi teclado, veremos que con los cursores arriba y abajo, que son el eje vertical, se desplazan. 69 00:06:43,550 --> 00:06:47,170 Pero es que también con la V y con la S. 70 00:06:47,170 --> 00:07:11,189 No está de más aplicarle una velocidad, como ya vimos en un vídeo anterior, no nos cuesta mucho porque aquí le decimos que nos cree una variable serializada de tipo float que se llama speed, cuyo valor va a ser de momento 5, 5f para indicarle que es un float, 71 00:07:11,189 --> 00:07:18,350 Y a este desplazamiento lo vamos a multiplicar directamente por la variable speed. 72 00:07:19,850 --> 00:07:23,009 Así podemos controlar la velocidad a la que se desplaza. 73 00:07:24,310 --> 00:07:32,470 Bien, antes de seguir, ¿dónde él determina que este eje vertical se corresponde con las teclas que hemos visto? 74 00:07:32,750 --> 00:07:38,149 ¿Con la W, la S, con los cursores o incluso con el joystick? 75 00:07:38,930 --> 00:07:41,290 Pues de nuevo en el Input Manager. 76 00:07:41,290 --> 00:08:06,420 Si nos vamos aquí a el eje vertical nos encontramos con que efectivamente está asociado a el negativo a la tecla down, es decir que ahí es hacia el eje negativo, hacia menos uno, el positivo a la tecla up, también las teclas S y W y también al eje X del joystick. 77 00:08:06,420 --> 00:08:28,040 De hecho, ya que estamos, pues no nos cuesta nada decirle, muy bien, pues igual que tenemos un desplazamiento en Y, podemos tener un desplazamiento en X, que es igual a lo que me devuelve el GetAxis, pero en este caso en horizontal. 78 00:08:30,569 --> 00:08:34,509 Insisto que este nombre tiene que estar declarado en el InputManager. 79 00:08:35,110 --> 00:08:36,570 Y voy a aplicarle la misma velocidad. 80 00:08:36,789 --> 00:08:39,409 Podemos aplicarle velocidades distintas si creamos dos variables distintas. 81 00:08:39,409 --> 00:08:47,169 distintas y aquí le voy a decir a mi cubo que se haga una traslación se desplace hacia dónde 82 00:08:47,169 --> 00:09:00,610 hacia un vector 3 pero en este caso no el up sino el por ejemplo left por supuesto por lo que me 83 00:09:00,610 --> 00:09:12,480 devuelva el eje por la velocidad veo que aquí hay un error lo voy a corregir ahora mismo por 84 00:09:12,480 --> 00:09:31,610 perdón, por el time, delta time. Y aquí hay un error que lo corrijo ahora mismo y ahí que había 85 00:09:31,610 --> 00:09:40,850 cerrado el paréntesis sin querer. Vale, pues ahora me voy a mi Unity y con estas líneas de código 86 00:09:40,850 --> 00:09:48,610 tan sencillas, si ahora mismo lanzo el juego, pongo aquí el teclado y de hecho si selecciono el cubo 87 00:09:48,610 --> 00:09:54,309 para que veamos sus coordenadas, veremos que si uso los cursores, selecciono la ventana 88 00:09:54,309 --> 00:10:00,669 de juego, si uso los cursores vemos que los cursores izquierda-derecha, al igual que A 89 00:10:00,669 --> 00:10:09,490 y D, desplazan el cubo en X. Si uso la W y la S, lo desplazo arriba y abajo, igual que 90 00:10:09,490 --> 00:10:17,309 los cursores arriba y abajo. Pero es que incluso el Gamepad me permite, como buen joystick, 91 00:10:17,309 --> 00:10:26,809 desplazarme en los dos ejes por supuesto no hace falta que diga que en cualquier 92 00:10:26,809 --> 00:10:31,730 momento podemos recuperar los valores de los que estoy es decir la posición en x 93 00:10:31,730 --> 00:10:36,190 la posición en y poner condicionales para restringir movimientos para decirle 94 00:10:36,190 --> 00:10:40,789 si en algún momento la posición en y pasa de cierto valor pues no dejar de 95 00:10:40,789 --> 00:10:45,190 aplicar esta esta traslación