Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

Primeros pasos en Unity. Físicas (parte 2) - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 6 de octubre de 2024 por Alvaro H.

3 visualizaciones

Veamos ahora cómo mover y rotar objetos mediante físicas aplicando código a nuestros objetos

Muy bien, ya hemos visto que los objetos se ven afectados por la gravedad. 00:00:06
Pero ahora, ¿cómo los movemos? Antes usábamos el método transform, pero ahora lo que vamos a hacer es aplicarle fuerzas. 00:00:11
En Unity tenemos dos opciones para aplicar fuerzas, que son LatForce y LatTorque. 00:00:16
En inglés significa una torsión. Uno lo utilizamos para desplazarlo hacia una dirección 00:00:22
y otro lo utilizamos para aplicarle una fuerza lateral que lo que hace es que ese objeto se gire. 00:00:27
Vamos a ver cómo aplicarlos, pero antes de hacerlo tengamos en cuenta una cosa. 00:00:33
Esos métodos, el AddForce y el AddTorque, si queremos Spanglish, se aplican sobre el componente RigidBody. 00:00:38
Hasta ahora hemos usado el componente Transform, pero es que el componente Transform ya viene por defecto en el heredado de MonoBehaviour. 00:00:44
¿Qué significa? Que no teníamos que hacer más que llamar a Transform y teníamos todos sus métodos y atributos. 00:00:50
No pasa lo mismo con el RigidBody. 00:00:55
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. 00:00:57
Vamos a ver cómo se hace eso. 00:01:05
Bien, a mi cubo ya le he puesto un script, voy a abrirlo y empezamos. 00:01:07
Para empezar lo que voy a hacer es crear una variable serializada de tipo float que la voy a llamar fuerza. 00:01:11
Y esto me va a permitir ajustar la fuerza que estoy aplicando tanto de fuerza direccional como de torsión desde Unity. 00:01:20
y luego, como bien he dicho, tenemos que crear 00:01:26
en este caso voy a crear una variable privada 00:01:28
porque no la necesito ni en Unity ni en otra clase 00:01:30
de tipo RigidBody 00:01:33
y la voy a llamar RB 00:01:34
que es donde voy a capturar el componente RigidBody 00:01:36
de mi objeto 00:01:38
y lo primero que hago, nada más empezar 00:01:39
es efectivamente darle ese valor 00:01:42
a mi variable RigidBody 00:01:45
¿qué es cuál? pues lógicamente tenemos que usar 00:01:46
el método GetComponent 00:01:48
que cuál es su sintaxis 00:01:49
entre los símbolos de menor que y mayor que 00:01:52
Tenemos que decirle qué componente queremos obtener, 00:01:55
lógicamente del game object al que está asociado este script, 00:01:57
y lógicamente es el componente de RigidBody. 00:01:59
Y terminamos con un paréntesis vacío. 00:02:01
Muy bien, ya tenemos aquí en esta variable el RigidBody. 00:02:05
Eso significa que ya le puedo aplicar una fuerza a mi cubo. 00:02:07
Por ejemplo, se lo voy a aplicar nada más empezar. 00:02:10
Le voy a decir que a mi RigidBody, y utilizamos el método addForce, 00:02:12
y entre paréntesis le tenemos que decir, como podemos ver aquí, un vector3. 00:02:18
Es decir, le tenemos que pasar los parámetros en x, y, z. 00:02:22
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, 00:02:24
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. 00:02:33
Dentro de la clase transform tenemos, por ejemplo, el transform up, es decir, aplico una fuerza hacia arriba. 00:02:40
Eso sí, multiplícame esa fuerza por, o sea, de la variable de tipo float que he creado y que he llamado fuerza. 00:02:46
Bien, antes que nada, lógicamente, la variable fuerza que le he puesto serializada está en cero. 00:02:52
Es decir, no pasa nada porque la fuerza será igual a cero. 00:02:56
Pero si le aplico una fuerza de 10 y lo lanzo para arriba. 00:02:59
¡Ay! Apenas se ha levantado. 00:03:05
¿Vale? Desde luego, esta fuerza es muy pequeña. 00:03:07
Vamos a ponerle una fuerza de 100. 00:03:10
A ver qué tal andamos de músculo. 00:03:11
Apenas se ha levantado. 00:03:14
¿Y si le damos una fuerza de 300? 00:03:15
Ahora, podemos pensar, esto es como en el mundo real. 00:03:27
Necesito mucha fuerza, necesito 300 de fuerza 00:03:29
Para levantarlo, digo, pero no será que es que pesa mucho 00:03:31
Me voy al componente RigidBody 00:03:34
Y a lo mejor es que pesa mucho 00:03:36
A lo mejor con una fuerza de 300 00:03:37
Pero con un objeto que pesa menos 00:03:40
Le voy a dar un valor de 0,5 00:03:41
Es decir, la mitad de su peso, ahí está 00:03:43
Vamos a ver, misma fuerza, diferente peso 00:03:45
El objeto sale más disparado, más arriba 00:03:48
No porque le haya aplicado más fuerza 00:03:53
Sino porque le he reducido el peso, como en el mundo real 00:03:55
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. 00:03:57
Pero vayamos más allá 00:04:22
Ahora mismo lo que he hecho es meter el AddForce 00:04:25
Dentro de la función Start 00:04:27
¿Qué ocurre si lo que quiero es que 00:04:29
Esté constantemente desplazándolo? 00:04:31
Entonces lo que tendría que hacer es esa fuerza 00:04:33
Aplicársela en el método Update 00:04:35
Con un cuidado, y es que cada fotograma le voy a aplicar 00:04:36
Es como si estuviese empujándole cada fotograma 00:04:39
Eso haría que se fuese acelerando 00:04:41
De forma casi infinita 00:04:43
Pero ahí podemos jugar con el parámetro de la fuerza 00:04:44
Vamos a ver qué ocurre 00:04:47
Me voy a mi script, y esto 00:04:49
que yo hacía que se desplazase hacia arriba 00:04:50
aplicando una fuerza, lo voy a meter en el método update 00:04:52
y ahora 00:04:54
en Unity me voy a ir a mi cubo 00:04:56
y ahora por precaución 00:04:58
le voy a decir que la fuerza que la tengo aquí 00:04:59
en el parámetro que sea 00:05:02
0, voy a 00:05:04
disminuir su peso para que el movimiento sea 00:05:08
más evidente, lo voy a poner en 0,2 00:05:10
le voy a dar al play 00:05:12
y quiero que nos fijemos a partir de ahora 00:05:13
en la información del TrigidBody donde nos dice por ejemplo 00:05:16
la velocidad que tiene y en este caso 00:05:18
pues está parado, está cero, pero cuando yo empiece a aplicar más fuerza, debería 00:05:20
empezar a desplazarse. Ahí está. Para arriba. 00:05:24
Y cuando empiezo a parar la fuerza, o incluso le aplico una fuerza negativa, 00:05:30
desciende. Siempre ofreciendo resistencia tanto al aire como a la gravedad. 00:05:34
Es decir, que esa velocidad veremos que no tiene por qué ser constante. Es decir, que puede llegar 00:05:38
un momento en el que se hace negativa porque está cayendo, pero le estoy aplicando una fuerza, pero él a su vez 00:05:42
se resiste, pero a su vez tiene la resistencia al aire, con lo cual ahora mismo es como si estuviese alguien 00:05:45
intentando levantar este objeto. Pero bueno, veamos que si yo juego con esos parámetros y la fuerza la 00:05:49
asigno a, por ejemplo, un joystick, pues ya efectivamente estoy manejando un objeto a través 00:05:56
de aplicación de fuerza. Así que ya tenemos una forma de mover nuestros objetos de una manera 00:06:01
realista y asociándolo a un valor de tipo float, que como hemos aprendido en anteriores vídeos, 00:06:05
lo podemos vincular, por ejemplo, al joystick o a un eje. Vamos a ver cómo hacer girar un objeto, 00:06:09
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. 00:06:14
Me voy a ir a su componente de RigidBody y le voy a decir que use gravedad. 00:06:22
Ya no quiero que caiga, ya quiero que se quede aquí flotando en el espacio. 00:06:25
Porque lo que voy a hacer es aplicarle una fuerza de torsión, es decir, que se frute sobre la rotación. 00:06:28
Me voy a mi script y lo voy a hacer en el método de Start, es decir, lo voy a hacer al principio. 00:06:33
Y en este caso no voy a utilizar el AddForce, sino el AddTorque, es decir, añade una torsión. 00:06:37
Y aquí de nuevo me está pidiendo un Vector3, y lo podría aplicar igual que he hecho antes, 00:06:46
pero aquí voy a darle los tres parámetros dos por separado, es decir, x, y y z. 00:06:49
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í. 00:06:53
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. 00:07:00
y se mueve y se mueve 00:07:22
y si nos fijamos en su velocidad angular 00:07:26
está parándose 00:07:27
su velocidad está reduciéndose y se seguirá reduciendo hasta cero 00:07:28
¿por qué? 00:07:32
porque aunque yo le da un toquecito al iniciarse 00:07:34
tiene resistencia al aire 00:07:36
¿en cuál? aquí 00:07:38
la resistencia al movimiento angular 00:07:39
está en 0,05, la resistencia es muy pequeña 00:07:41
es casi como si estuviese en el vacío 00:07:43
si le pongo cero, es como si estuviese en el vacío 00:07:45
y le doy un toque y se seguiría ahí moviendo por toda la eternidad 00:07:47
como Bender volando por el espacio 00:07:49
qué lástima condenado a vagar eternamente por el vacío en manos de la gravedad pero y si le 00:07:51
aplicó una resistencia al aire un poco mayor vamos a decir de 0.3 aplico le doy el toquecito en la 00:07:59
esquina ahí está y se va parando hasta que se detiene de nuevo le ha aplicado un toque de 5 00:08:05
y si le aplica una fuerza de 10 o de 15 pues lógicamente el toque será mucho mayor y la 00:08:15
velocidad de giro será mayor. Pero a su vez, si aumento la resistencia al aire, el movimiento 00:08:21
inicial será también muy rápido, pero se frenará mucho antes. Ahí lo tenemos. Y de nuevo, y esto ya 00:08:31
solo lo podríamos imaginar, pero si esta fuerza de torsión se la aplico en el método update, 00:08:38
pues acabo de conseguir controlar el giro, la rotación de este objeto, a través de este 00:08:44
parámetro. Que si empiezo en cero, el objeto no se gira, por supuesto. Ahí está, estático. Pero a partir 00:08:51
de ese momento, empiezo a tocar el valor de la fuerza, que insisto, lo podemos vincular a un eje 00:09:02
de un joystick, y ahí está. Giro hacia un lado o giro hacia el otro. Y como podemos ver, y esta es la 00:09:06
diferencia con respecto a los desplazamientos que hemos hecho antes, existen las leyes físicas. Es 00:09:12
decir, yo no puedo parar de moverme de golpe, tengo que frenarme y acelerarme en el otro sentido. Es 00:09:16
Es decir, porque hay una inercia aplicada por la gravedad. 00:09:22
Con lo cual esto es desde luego mucho más realista de lo que hemos visto hasta ahora. 00:09:25
Pues ya está. Acabamos de entrar en el mundo físico, en el mundo de la realidad, 00:09:40
donde las cosas se mueven no como nosotros queramos, sino como nos obligan las leyes de la física. 00:09:43
Queda otra cuestión, que es la de las colisiones. 00:09:50
Es decir, cuándo un objeto colisiona con otro y, sobre todo, qué hacer cuando un objeto colisiona con otro. 00:09:53
Pero eso lo veremos en el siguiente vídeo. 00:09:57
Idioma/s:
es
Autor/es:
Álvaro Holguera
Subido por:
Alvaro H.
Licencia:
Reconocimiento - No comercial - Sin obra derivada
Visualizaciones:
3
Fecha:
6 de octubre de 2024 - 20:16
Visibilidad:
Público
Centro:
CFP JOSÉ LUIS GARCI
Duración:
09′ 59″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
388.67 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid