Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Primeros pasos en Unity. Físicas (parte 2) - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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:
- 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