1 00:00:06,769 --> 00:00:10,689 Muy bien, ya hemos visto que los objetos se ven afectados por la gravedad. 2 00:00:11,150 --> 00:00:15,789 Pero ahora, ¿cómo los movemos? Antes usábamos el método transform, pero ahora lo que vamos a hacer es aplicarle fuerzas. 3 00:00:16,329 --> 00:00:22,789 En Unity tenemos dos opciones para aplicar fuerzas, que son LatForce y LatTorque. 4 00:00:22,989 --> 00:00:27,850 En inglés significa una torsión. Uno lo utilizamos para desplazarlo hacia una dirección 5 00:00:27,850 --> 00:00:33,530 y otro lo utilizamos para aplicarle una fuerza lateral que lo que hace es que ese objeto se gire. 6 00:00:33,530 --> 00:00:37,929 Vamos a ver cómo aplicarlos, pero antes de hacerlo tengamos en cuenta una cosa. 7 00:00:38,210 --> 00:00:44,030 Esos métodos, el AddForce y el AddTorque, si queremos Spanglish, se aplican sobre el componente RigidBody. 8 00:00:44,369 --> 00:00:50,390 Hasta ahora hemos usado el componente Transform, pero es que el componente Transform ya viene por defecto en el heredado de MonoBehaviour. 9 00:00:50,909 --> 00:00:55,829 ¿Qué significa? Que no teníamos que hacer más que llamar a Transform y teníamos todos sus métodos y atributos. 10 00:00:55,969 --> 00:00:57,250 No pasa lo mismo con el RigidBody. 11 00:00:57,250 --> 00:01:05,329 Es un componente añadido y como el resto de componentes hay que capturarlo, hay que obtenerlo y meterlo en una variable antes de poder aplicar sus métodos. 12 00:01:05,609 --> 00:01:06,650 Vamos a ver cómo se hace eso. 13 00:01:07,129 --> 00:01:11,049 Bien, a mi cubo ya le he puesto un script, voy a abrirlo y empezamos. 14 00:01:11,329 --> 00:01:19,609 Para empezar lo que voy a hacer es crear una variable serializada de tipo float que la voy a llamar fuerza. 15 00:01:20,150 --> 00:01:26,430 Y esto me va a permitir ajustar la fuerza que estoy aplicando tanto de fuerza direccional como de torsión desde Unity. 16 00:01:26,430 --> 00:01:28,930 y luego, como bien he dicho, tenemos que crear 17 00:01:28,930 --> 00:01:30,450 en este caso voy a crear una variable privada 18 00:01:30,450 --> 00:01:33,069 porque no la necesito ni en Unity ni en otra clase 19 00:01:33,069 --> 00:01:34,329 de tipo RigidBody 20 00:01:34,329 --> 00:01:36,890 y la voy a llamar RB 21 00:01:36,890 --> 00:01:38,870 que es donde voy a capturar el componente RigidBody 22 00:01:38,870 --> 00:01:39,989 de mi objeto 23 00:01:39,989 --> 00:01:42,450 y lo primero que hago, nada más empezar 24 00:01:42,450 --> 00:01:45,170 es efectivamente darle ese valor 25 00:01:45,170 --> 00:01:46,629 a mi variable RigidBody 26 00:01:46,629 --> 00:01:48,510 ¿qué es cuál? pues lógicamente tenemos que usar 27 00:01:48,510 --> 00:01:49,870 el método GetComponent 28 00:01:49,870 --> 00:01:52,489 que cuál es su sintaxis 29 00:01:52,489 --> 00:01:55,209 entre los símbolos de menor que y mayor que 30 00:01:55,209 --> 00:01:57,510 Tenemos que decirle qué componente queremos obtener, 31 00:01:57,750 --> 00:01:59,609 lógicamente del game object al que está asociado este script, 32 00:01:59,969 --> 00:02:01,689 y lógicamente es el componente de RigidBody. 33 00:02:01,930 --> 00:02:04,250 Y terminamos con un paréntesis vacío. 34 00:02:05,150 --> 00:02:07,489 Muy bien, ya tenemos aquí en esta variable el RigidBody. 35 00:02:07,590 --> 00:02:10,710 Eso significa que ya le puedo aplicar una fuerza a mi cubo. 36 00:02:10,990 --> 00:02:12,689 Por ejemplo, se lo voy a aplicar nada más empezar. 37 00:02:12,689 --> 00:02:17,689 Le voy a decir que a mi RigidBody, y utilizamos el método addForce, 38 00:02:18,629 --> 00:02:21,569 y entre paréntesis le tenemos que decir, como podemos ver aquí, un vector3. 39 00:02:22,009 --> 00:02:24,210 Es decir, le tenemos que pasar los parámetros en x, y, z. 40 00:02:24,210 --> 00:02:33,409 que se lo podríamos pasar directamente en x, y, y, z, pero es mucho más cómodo. Ya veremos que más adelante, si queremos aplicarle una fuerza en una dirección concreta, 41 00:02:33,810 --> 00:02:39,490 pues no tenemos más que obtener ese vector 3, como hacíamos con el transform, pero también para desplazamientos nos viene muy bien. 42 00:02:40,729 --> 00:02:46,210 Dentro de la clase transform tenemos, por ejemplo, el transform up, es decir, aplico una fuerza hacia arriba. 43 00:02:46,710 --> 00:02:51,289 Eso sí, multiplícame esa fuerza por, o sea, de la variable de tipo float que he creado y que he llamado fuerza. 44 00:02:52,169 --> 00:02:56,550 Bien, antes que nada, lógicamente, la variable fuerza que le he puesto serializada está en cero. 45 00:02:56,629 --> 00:02:58,770 Es decir, no pasa nada porque la fuerza será igual a cero. 46 00:02:59,090 --> 00:03:03,289 Pero si le aplico una fuerza de 10 y lo lanzo para arriba. 47 00:03:05,610 --> 00:03:07,310 ¡Ay! Apenas se ha levantado. 48 00:03:07,770 --> 00:03:10,050 ¿Vale? Desde luego, esta fuerza es muy pequeña. 49 00:03:10,729 --> 00:03:11,610 Vamos a ponerle una fuerza de 100. 50 00:03:11,930 --> 00:03:13,469 A ver qué tal andamos de músculo. 51 00:03:14,949 --> 00:03:15,710 Apenas se ha levantado. 52 00:03:15,810 --> 00:03:17,530 ¿Y si le damos una fuerza de 300? 53 00:03:27,020 --> 00:03:29,120 Ahora, podemos pensar, esto es como en el mundo real. 54 00:03:29,120 --> 00:03:31,960 Necesito mucha fuerza, necesito 300 de fuerza 55 00:03:31,960 --> 00:03:34,039 Para levantarlo, digo, pero no será que es que pesa mucho 56 00:03:34,039 --> 00:03:36,039 Me voy al componente RigidBody 57 00:03:36,039 --> 00:03:37,840 Y a lo mejor es que pesa mucho 58 00:03:37,840 --> 00:03:40,180 A lo mejor con una fuerza de 300 59 00:03:40,180 --> 00:03:41,500 Pero con un objeto que pesa menos 60 00:03:41,500 --> 00:03:43,020 Le voy a dar un valor de 0,5 61 00:03:43,020 --> 00:03:45,419 Es decir, la mitad de su peso, ahí está 62 00:03:45,419 --> 00:03:48,060 Vamos a ver, misma fuerza, diferente peso 63 00:03:48,060 --> 00:03:53,979 El objeto sale más disparado, más arriba 64 00:03:53,979 --> 00:03:55,319 No porque le haya aplicado más fuerza 65 00:03:55,319 --> 00:03:57,560 Sino porque le he reducido el peso, como en el mundo real 66 00:03:57,560 --> 00:04:22,860 Pero es más, veamos que tiene una resistencia al aire de 0. ¿Qué ocurre si le pongo una resistencia al aire de 10? Pues significa que misma fuerza, mismo peso, pero al hacer más resistencia al aire, pues se moverá más lentamente. Ahí está. No ha podido apenas levantarlo. ¿Por qué? Porque ofrece una resistencia al aire muy grande. Voy a dejarlo en 1, más resistencia al aire, algo más creíble, con una masa de medio kilogramo y una fuerza de 300. Y bueno, más o menos. 67 00:04:22,860 --> 00:04:25,139 Pero vayamos más allá 68 00:04:25,139 --> 00:04:27,319 Ahora mismo lo que he hecho es meter el AddForce 69 00:04:27,319 --> 00:04:29,339 Dentro de la función Start 70 00:04:29,339 --> 00:04:31,120 ¿Qué ocurre si lo que quiero es que 71 00:04:31,120 --> 00:04:32,920 Esté constantemente desplazándolo? 72 00:04:33,500 --> 00:04:35,279 Entonces lo que tendría que hacer es esa fuerza 73 00:04:35,279 --> 00:04:36,600 Aplicársela en el método Update 74 00:04:36,600 --> 00:04:39,660 Con un cuidado, y es que cada fotograma le voy a aplicar 75 00:04:39,660 --> 00:04:41,660 Es como si estuviese empujándole cada fotograma 76 00:04:41,660 --> 00:04:43,180 Eso haría que se fuese acelerando 77 00:04:43,180 --> 00:04:44,819 De forma casi infinita 78 00:04:44,819 --> 00:04:47,639 Pero ahí podemos jugar con el parámetro de la fuerza 79 00:04:47,639 --> 00:04:49,379 Vamos a ver qué ocurre 80 00:04:49,379 --> 00:04:50,680 Me voy a mi script, y esto 81 00:04:50,680 --> 00:04:52,399 que yo hacía que se desplazase hacia arriba 82 00:04:52,399 --> 00:04:54,699 aplicando una fuerza, lo voy a meter en el método update 83 00:04:54,699 --> 00:04:56,279 y ahora 84 00:04:56,279 --> 00:04:58,740 en Unity me voy a ir a mi cubo 85 00:04:58,740 --> 00:04:59,620 y ahora por precaución 86 00:04:59,620 --> 00:05:02,540 le voy a decir que la fuerza que la tengo aquí 87 00:05:02,540 --> 00:05:04,579 en el parámetro que sea 88 00:05:04,579 --> 00:05:08,560 0, voy a 89 00:05:08,560 --> 00:05:10,579 disminuir su peso para que el movimiento sea 90 00:05:10,579 --> 00:05:12,399 más evidente, lo voy a poner en 0,2 91 00:05:12,399 --> 00:05:13,600 le voy a dar al play 92 00:05:13,600 --> 00:05:16,339 y quiero que nos fijemos a partir de ahora 93 00:05:16,339 --> 00:05:18,660 en la información del TrigidBody donde nos dice por ejemplo 94 00:05:18,660 --> 00:05:20,540 la velocidad que tiene y en este caso 95 00:05:20,540 --> 00:05:24,540 pues está parado, está cero, pero cuando yo empiece a aplicar más fuerza, debería 96 00:05:24,540 --> 00:05:29,389 empezar a desplazarse. Ahí está. Para arriba. 97 00:05:30,149 --> 00:05:34,170 Y cuando empiezo a parar la fuerza, o incluso le aplico una fuerza negativa, 98 00:05:34,430 --> 00:05:38,329 desciende. Siempre ofreciendo resistencia tanto al aire como a la gravedad. 99 00:05:38,649 --> 00:05:42,110 Es decir, que esa velocidad veremos que no tiene por qué ser constante. Es decir, que puede llegar 100 00:05:42,110 --> 00:05:45,610 un momento en el que se hace negativa porque está cayendo, pero le estoy aplicando una fuerza, pero él a su vez 101 00:05:45,610 --> 00:05:49,610 se resiste, pero a su vez tiene la resistencia al aire, con lo cual ahora mismo es como si estuviese alguien 102 00:05:49,610 --> 00:05:56,149 intentando levantar este objeto. Pero bueno, veamos que si yo juego con esos parámetros y la fuerza la 103 00:05:56,149 --> 00:06:01,550 asigno a, por ejemplo, un joystick, pues ya efectivamente estoy manejando un objeto a través 104 00:06:01,550 --> 00:06:05,350 de aplicación de fuerza. Así que ya tenemos una forma de mover nuestros objetos de una manera 105 00:06:05,350 --> 00:06:09,410 realista y asociándolo a un valor de tipo float, que como hemos aprendido en anteriores vídeos, 106 00:06:09,689 --> 00:06:14,209 lo podemos vincular, por ejemplo, al joystick o a un eje. Vamos a ver cómo hacer girar un objeto, 107 00:06:14,209 --> 00:06:22,230 Pero para este caso lo que voy a hacer es elevarlo, lo voy a subir y fijaros, le voy a quitar la aplicación de la gravedad. 108 00:06:22,370 --> 00:06:25,449 Me voy a ir a su componente de RigidBody y le voy a decir que use gravedad. 109 00:06:25,829 --> 00:06:28,490 Ya no quiero que caiga, ya quiero que se quede aquí flotando en el espacio. 110 00:06:28,569 --> 00:06:32,990 Porque lo que voy a hacer es aplicarle una fuerza de torsión, es decir, que se frute sobre la rotación. 111 00:06:33,389 --> 00:06:37,730 Me voy a mi script y lo voy a hacer en el método de Start, es decir, lo voy a hacer al principio. 112 00:06:37,730 --> 00:06:46,029 Y en este caso no voy a utilizar el AddForce, sino el AddTorque, es decir, añade una torsión. 113 00:06:46,389 --> 00:06:49,129 Y aquí de nuevo me está pidiendo un Vector3, y lo podría aplicar igual que he hecho antes, 114 00:06:49,250 --> 00:06:52,930 pero aquí voy a darle los tres parámetros dos por separado, es decir, x, y y z. 115 00:06:53,569 --> 00:07:00,709 Le puedo decir que gire en el eje x, por ejemplo, ¿cuánto? Pues lo que determina la fuerza, que para eso la tengo ahí. 116 00:07:00,709 --> 00:07:22,490 Pero que en los ejes I y Z no se desplace. Voy a vigilar mi cubo y veremos cómo. Aplicando un parámetro a la fuerza, le voy a poner un 5 de fuerza, a ver cuánta fuerza es eso para hacer que gire, lo aplico, lo ejecuto y veremos que el cubo, ahí está, se está moviendo. 117 00:07:22,490 --> 00:07:26,120 y se mueve y se mueve 118 00:07:26,120 --> 00:07:27,740 y si nos fijamos en su velocidad angular 119 00:07:27,740 --> 00:07:28,699 está parándose 120 00:07:28,699 --> 00:07:32,160 su velocidad está reduciéndose y se seguirá reduciendo hasta cero 121 00:07:32,160 --> 00:07:32,459 ¿por qué? 122 00:07:34,379 --> 00:07:36,379 porque aunque yo le da un toquecito al iniciarse 123 00:07:36,379 --> 00:07:38,019 tiene resistencia al aire 124 00:07:38,019 --> 00:07:39,939 ¿en cuál? aquí 125 00:07:39,939 --> 00:07:41,759 la resistencia al movimiento angular 126 00:07:41,759 --> 00:07:43,779 está en 0,05, la resistencia es muy pequeña 127 00:07:43,779 --> 00:07:45,899 es casi como si estuviese en el vacío 128 00:07:45,899 --> 00:07:47,839 si le pongo cero, es como si estuviese en el vacío 129 00:07:47,839 --> 00:07:49,839 y le doy un toque y se seguiría ahí moviendo por toda la eternidad 130 00:07:49,839 --> 00:07:51,620 como Bender volando por el espacio 131 00:07:51,620 --> 00:07:59,019 qué lástima condenado a vagar eternamente por el vacío en manos de la gravedad pero y si le 132 00:07:59,019 --> 00:08:05,860 aplicó una resistencia al aire un poco mayor vamos a decir de 0.3 aplico le doy el toquecito en la 133 00:08:05,860 --> 00:08:15,589 esquina ahí está y se va parando hasta que se detiene de nuevo le ha aplicado un toque de 5 134 00:08:15,589 --> 00:08:21,990 y si le aplica una fuerza de 10 o de 15 pues lógicamente el toque será mucho mayor y la 135 00:08:21,990 --> 00:08:31,050 velocidad de giro será mayor. Pero a su vez, si aumento la resistencia al aire, el movimiento 136 00:08:31,050 --> 00:08:38,159 inicial será también muy rápido, pero se frenará mucho antes. Ahí lo tenemos. Y de nuevo, y esto ya 137 00:08:38,159 --> 00:08:44,019 solo lo podríamos imaginar, pero si esta fuerza de torsión se la aplico en el método update, 138 00:08:44,019 --> 00:08:51,100 pues acabo de conseguir controlar el giro, la rotación de este objeto, a través de este 139 00:08:51,100 --> 00:09:02,639 parámetro. Que si empiezo en cero, el objeto no se gira, por supuesto. Ahí está, estático. Pero a partir 140 00:09:02,639 --> 00:09:06,259 de ese momento, empiezo a tocar el valor de la fuerza, que insisto, lo podemos vincular a un eje 141 00:09:06,259 --> 00:09:12,240 de un joystick, y ahí está. Giro hacia un lado o giro hacia el otro. Y como podemos ver, y esta es la 142 00:09:12,240 --> 00:09:16,299 diferencia con respecto a los desplazamientos que hemos hecho antes, existen las leyes físicas. Es 143 00:09:16,299 --> 00:09:22,740 decir, yo no puedo parar de moverme de golpe, tengo que frenarme y acelerarme en el otro sentido. Es 144 00:09:22,740 --> 00:09:25,460 Es decir, porque hay una inercia aplicada por la gravedad. 145 00:09:25,899 --> 00:09:28,259 Con lo cual esto es desde luego mucho más realista de lo que hemos visto hasta ahora. 146 00:09:40,590 --> 00:09:43,909 Pues ya está. Acabamos de entrar en el mundo físico, en el mundo de la realidad, 147 00:09:43,909 --> 00:09:49,490 donde las cosas se mueven no como nosotros queramos, sino como nos obligan las leyes de la física. 148 00:09:50,129 --> 00:09:52,929 Queda otra cuestión, que es la de las colisiones. 149 00:09:53,169 --> 00:09:57,570 Es decir, cuándo un objeto colisiona con otro y, sobre todo, qué hacer cuando un objeto colisiona con otro. 150 00:09:57,730 --> 00:09:59,090 Pero eso lo veremos en el siguiente vídeo.