Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Primeros pasos en Unity. Physics Materials - 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 el comportamiento tan peculiar que tienen los materiales físicos al aplicarlos a una esfera y cómo solucionarlo
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:
- 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