Saltar navegación

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

Primeros pasos en Unity. Physics Materials - 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 3 de noviembre de 2024 por Alvaro H.

97 visualizaciones

Veamos el comportamiento tan peculiar que tienen los materiales físicos al aplicarlos a una esfera y cómo solucionarlo

Descargar la transcripción

Bueno, voy a comentar algo muy curioso que he descubierto con respecto a los materiales físicos, que como bien sabemos, los materiales físicos son los que simulan de alguna forma la fricción que ofrecen ciertas superficies o ciertos materiales para bien no ponerse en marcha o bien detenerse. 00:00:07
No es lo mismo una bola corriendo en un suelo de madera que en un suelo de hielo. Pues bien, esos son los materiales físicos, pero tienen un comportamiento peculiar. 00:00:24
Para comprobarlo he creado una escena muy sencillita con un suelo, que en este caso es un plano inclinado, una esfera y un cubo. No tienen más. 00:00:32
Como bien sabemos, los materiales físicos están vinculados con el colisionador, no con el Rigidbody, que en este caso tanto la caja como la esfera tienen su Rigidbody, 00:00:40
pero aquí vemos cómo el material físico se vincularía con el colisionador del objeto. 00:00:50
Pues bien, he creado dos materiales físicos, uno que va a simular el acero de la bola o del cubo y uno de madera que va a simular la superficie del suelo. 00:00:54
De momento tiene una fricción de cero para hacer pruebas porque, como he comentado, hay un comportamiento muy peculiar. 00:01:03
De hecho, voy a hacer una cosa que es lanzar ahora mismo la escena y veremos cómo el Rigidbody del cubo y de la esfera actúan, pero, como podemos ver, la esfera cae y el cubo no. 00:01:11
De hecho, vamos a comprobar cómo la bola, la esfera, si le doy al play, no solo cae, sino que además rota. 00:01:24
Bien, eso parece obvio, pero ahora veremos que no lo es tanto. 00:01:33
Esto es con ningún material físico añadido. 00:01:37
Vamos a añadir un material físico de madera al suelo, que insisto, tiene cero de fricción. 00:01:48
Y ahora si le damos al play, bien, hemos visto, voy a quitarlo, 00:01:55
Si nos fijamos, el cubo sí que ha resbalado algo. 00:02:02
Voy a volver a ponerlo. 00:02:12
Lo lanzo. 00:02:14
Vemos que el cubo sí que ha resbalado. 00:02:18
Es decir, sí que ha detectado el cero de fricción, pero el cubo no tiene un material físico. 00:02:21
Es decir, que de alguna forma sí que ha ofrecido cierta fricción. 00:02:25
Vamos a comprobarlo porque, insisto, este material que simula el acero no tiene nada de fricción. 00:02:29
Pues se lo voy a poner al cubo. 00:02:36
Y veamos lo que ocurre. No solo resbala, sino que adelanta a la esfera. No lo he comentado, pero tanto la esfera como el cubo tienen un cero de resistencia. Voy a añadir ahora el acero a la bola también y veamos lo que ocurre. 00:02:37
Porque es curioso. Lo habéis visto, ¿no? Ahora sí caen a la misma velocidad, pero la esfera no gira. 00:03:06
De hecho, eso es algo que a mí me enseñaron cuando era pequeño, que es que un cubo y una esfera con igual resistencia al movimiento, es curioso, pero los cubos adquieren más aceleración porque su fuerza no se va en la rotación, sino que solo se va en la traslación. 00:03:20
mientras que la esfera, al tener que rotar, pierde fuerza y eso le hace perder aceleración. 00:03:34
Y es lo que está ocurriendo aquí. Al no tener ninguna resistencia, la esfera no desliza, por lo tanto no rota y los dos salen a la misma velocidad. 00:03:39
¿Cuál es el problema? El problema con el que nos hemos encontrado es que, bien, hasta ahí todo bien, 00:03:49
pues la teoría de Unity dice que si yo ahora aumentase la resistencia, la fricción del material de madera, 00:03:54
Por ejemplo, le voy a poner una resistencia. Solo como recordatorio, la fricción dinámica es la que reciben los objetos cuando están en movimiento, es decir, la que le haría parar, y la estática es la que reciben cuando están en una situación de reposo, por lo tanto es la que les impediría ponerse en movimiento. 00:04:00
Bien, voy a poner una resistencia pequeñita de 0,5 de dynamic friction, es decir, de fricción dinámica al suelo, a la madera, que recordemos que es quien lo tiene, el suelo, y vamos a darle a play. A ver qué ocurre. Pues bien, como podemos ver, el cubo, efectivamente, ya ofrece resistencia y se queda anclado, pero la esfera no. 00:04:20
y ahí es donde tenemos el problema 00:04:45
que es que aunque yo le añado una fricción dinámica 00:04:48
al material de acero que lo tiene en la esfera y el cubo 00:04:51
de uno, por ejemplo, recordamos también 00:04:54
que cada material físico tiene un comportamiento 00:04:57
distinto en función de cuando entra en colisión con otro material físico 00:05:01
si obtiene una media de ambos 00:05:04
si aplica el mínimo, el máximo o el multiply 00:05:06
que es multiplicar la fricción de uno 00:05:09
con respecto al otro y así obtener una fricción muchísimo mayor pero bueno lo vamos a dejar en 00:05:12
average para no cambiar mucho y veremos que aún teniendo fricción dinámica el suelo y el acero 00:05:17
es decir el cubo y la esfera la esfera no se ve afectada en ningún caso el cubo como habéis 00:05:27
podido ver ni siquiera se ha movido en esta ocasión es ahora ya la fricción del acero y de 00:05:34
la madera obtiene una media y se queda ahí parado. 00:05:39
Pues bien, tenemos un pequeño problemilla y es que 00:05:43
¿cómo hacemos que la esfera entienda que está en un 00:05:45
material o en otro? Si yo a la madera le pongo una fricción 00:05:48
de 5, la esfera sigue 00:05:51
cayendo al mismo ritmo y sin embargo el cubo 00:05:54
pues si estuviésemos en un juego en el que muevo las cosas por físicas 00:05:57
me costaría mucho más moverlo. Bueno, vamos a 00:06:01
hacer una solución de baja tecnología pero que 00:06:03
para ir tirándonos valdrá, que es básicamente 00:06:06
decirle a la esfera que cambie 00:06:09
su resistencia al aire en función del material físico con el que ha entrado 00:06:12
en contacto. Y esto realmente es lo que ocurre en la realidad, porque en la realidad 00:06:15
cuando una esfera, por ejemplo, cuando entra en contacto con un material 00:06:18
por ejemplo la hierba, no es que la hierba ofrezca fricción 00:06:21
es que tiene que ir resistiendo a cada brinda de hierba 00:06:24
como si fuese una rampa, igual que cuando entra en gravilla 00:06:26
que realmente es cada grano de gravilla el que está haciendo 00:06:30
que se pare. De hecho 00:06:32
deduzco, pero esto es una suposición mía, que es debido 00:06:35
a que la esfera no tiene apenas superficie de contacto 00:06:39
con el material físico que está tocando 00:06:42
con lo cual al no tener superficie de contacto 00:06:45
la fricción no entra en juego 00:06:47
esa es mi suposición, pero de momento vamos a hacer una solución 00:06:49
insisto, de baja tecnología 00:06:54
y es que he creado un script que paso a explicar 00:06:55
básicamente es, bueno, esto ya lo sabemos 00:06:58
accedemos a nuestro RigidBody del material 00:07:01
accedemos a su componente y hacemos una cosa 00:07:03
O sea, ¿qué es? Primero, bueno, nos aseguramos que el objeto al que hemos aplicado este script tiene RigidBody. 00:07:06
Bueno, comprobación de rutina del programador. 00:07:11
Pero a continuación hago una comprobación, es comprobar si el material con el que hemos entrado en colisión, 00:07:15
recuerdo que estamos en un CollisionEnter, 00:07:21
pues voy a comprobar si ese material, ese objeto con el que he entrado en colisión contiene un SharedMaterial. 00:07:24
SharedMaterial es el material físico de su Collider, de su componente Collider. 00:07:31
Solo comentar que un BoxCollider, un XferCollider, un MeshCollider, al final y al cabo son colliders para el código. Son todos el mismo componente, el tipo collider. 00:07:36
Bien, pues esto si le digo, oye, si tienes un material físico, pues ejecuta esto. ¿Y qué es esto? Pues básicamente es, obtén su fricción dinámica, ¿vale? Aquí lo tenemos. Es decir, vete al objeto con el que he chocado y obtén su fricción dinámica. 00:07:48
Y esto no es del todo correcto, pero vamos a decir que es para salir del paso, que es, vale, pues en función de la fricción dinámica que tenga el otro objeto, súmaselo a mi resistencia al aire, que es el atributo drag de mi Rigidbody. 00:08:05
Y este es el resultado, le voy a poner a la esfera este script, veremos que la esfera no tiene ninguna resistencia al aire, no se le había puesto ninguna, pero ahora al entrar en contacto con el suelo que tiene, recordemos, una fricción dinámica de 5, le va a añadir, bueno, se lo voy a bajar a 1 para empezar con niveles pequeños, pues ahora la bola cuando entre en contacto con el suelo veremos que este parámetro cambia y le suma la fricción dinámica de 5. 00:08:25
de la madera 00:08:57
voy a quitarle un momentito la resistencia al acero 00:08:59
le voy a quitar la resistencia dinámica al suelo 00:09:06
vemos que ahora caen ya los dos, como si no hubiesen mañana 00:09:10
y ahora, si yo le añado cierta fricción dinámica al suelo 00:09:18
por ejemplo de 0,5 00:09:23
el cubo efectivamente empezará a notarlo 00:09:25
Y la esfera también. Vamos a comprobarlo porque si yo en vez de 0,5 le añado una fricción dinámica de 5, veremos que la bola ahora sí tendrá una resistencia al aire de 5. Ahí lo tenemos. Y efectivamente le cuesta. 00:09:29
no es una solución perfecta 00:09:51
no es desde luego la que más realista es 00:09:53
porque lógicamente si yo juego con fricciones pequeñas 00:09:56
el cubo le costará moverse 00:10:01
ahí está, resbala un poquito 00:10:04
y la esfera obviamente como en el mundo real 00:10:05
resbala muchísimo más porque para eso es una esfera 00:10:07
es como si fuese un rodamiento 00:10:10
pero bueno, con esto consigo cierto control 00:10:11
porque si ahora yo le añado una fricción de dos 00:10:16
pues efectivamente el cubo ya no será capaz de resbalar 00:10:18
y la esfera resbalará también, pero le cuesta 00:10:22
porque tiene una resistencia al aire 00:10:25
y de hecho si le añadiese una resistencia enorme 00:10:28
al material, esto ya sería como velcro 00:10:31
pues eso se le sumará a la resistencia de la esfera 00:10:34
y apenas se moverá, se le quedará efectivamente pegada 00:10:37
como podemos ver 00:10:41
así que ya podemos encontrar un punto intermedio en el que digamos 00:10:42
que me creo que 00:10:45
esa material, por ejemplo, es 00:10:47
gravilla 00:10:49
y a la esfera le cuesta mucho moverse 00:10:51
por esa gravilla 00:10:53
bueno, y ya solo para terminar 00:10:55
esta solución de baja tecnología 00:10:58
lógicamente no solo tenemos que detectar 00:11:00
cuando hemos entrado en contacto con 00:11:03
una superficie distinta 00:11:05
sino también cuando la dejamos, obviamente, porque si no 00:11:07
iría sumando 00:11:09
fricción a fricción y nos volveríamos 00:11:11
locos, entonces he pulido un 00:11:13
poquito el script 00:11:14
de forma que primero tenemos una variable que va a obtener el valor de la resistencia inicial del objeto 00:11:16
para luego poder recuperarla, de forma que por ejemplo cuando entramos en contacto con otro objeto 00:11:24
no se lo sumamos sino que directamente cogemos la inicial y se la sumamos 00:11:30
de forma que si por lo que sea venimos de otra superficie no se sume a la resistencia anterior 00:11:34
sino que ahora que cambie de superficie, pero además si detecta que hemos abandonado una colisión 00:11:39
y ese colisionador que hemos abandonado 00:11:45
tenía un material físico 00:11:48
pues automáticamente vuelva a su resistencia inicial 00:11:50
que cambiará si vuelve a entrar en contacto 00:11:54
con otro material diferente 00:11:57
para comprobarlo pues he mejorado un poquito 00:11:59
la escena anterior, he creado dos suelos 00:12:01
que uno le he aplicado el material físico 00:12:05
del acero, el mismo que tiene la esfera 00:12:09
y el cubo, y otro que ya para que tenga 00:12:11
un poquito más de estética, pues le añadió 00:12:14
una textura para indicar que es el suelo de madera que sí que tiene fricción. Le he puesto una fricción 00:12:18
de 5 al de madera y el de acero 00:12:22
pues sigue teniendo una fricción mínima para que el cubo por lo menos 00:12:26
resbale a través de ella. Entonces ahora vamos a comprobar efectivamente que si 00:12:30
suelto los dos objetos, resbalan 00:12:34
por el acero. Al llegar a la madera 00:12:38
ofrece cierta resistencia por su fricción dinámica y al caer otra vez al siguiente suelo 00:12:41
vuelven a resbalar como si fuese hielo. 00:12:46
Idioma/s:
es
Materias:
Informática, Imagen y Sonido
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
      • Segundo Curso
Autor/es:
Álvaro Holguera
Subido por:
Alvaro H.
Licencia:
Reconocimiento - No comercial - Sin obra derivada
Visualizaciones:
97
Fecha:
3 de noviembre de 2024 - 21:33
Visibilidad:
Público
Centro:
CFP JOSÉ LUIS GARCI
Duración:
12′ 51″
Relación de aspecto:
1.78:1
Resolución:
1280x720 píxeles
Tamaño:
152.60 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid