1 00:00:07,219 --> 00:00:23,600 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. 2 00:00:24,000 --> 00:00:32,219 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. 3 00:00:32,219 --> 00:00:40,280 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. 4 00:00:40,740 --> 00:00:49,899 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, 5 00:00:50,100 --> 00:00:54,880 pero aquí vemos cómo el material físico se vincularía con el colisionador del objeto. 6 00:00:54,880 --> 00:01:03,500 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. 7 00:01:03,700 --> 00:01:10,939 De momento tiene una fricción de cero para hacer pruebas porque, como he comentado, hay un comportamiento muy peculiar. 8 00:01:11,099 --> 00:01:24,530 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. 9 00:01:24,530 --> 00:01:32,530 De hecho, vamos a comprobar cómo la bola, la esfera, si le doy al play, no solo cae, sino que además rota. 10 00:01:33,250 --> 00:01:36,590 Bien, eso parece obvio, pero ahora veremos que no lo es tanto. 11 00:01:37,049 --> 00:01:38,989 Esto es con ningún material físico añadido. 12 00:01:48,040 --> 00:01:53,480 Vamos a añadir un material físico de madera al suelo, que insisto, tiene cero de fricción. 13 00:01:55,060 --> 00:02:02,989 Y ahora si le damos al play, bien, hemos visto, voy a quitarlo, 14 00:02:02,989 --> 00:02:12,080 Si nos fijamos, el cubo sí que ha resbalado algo. 15 00:02:12,819 --> 00:02:13,939 Voy a volver a ponerlo. 16 00:02:14,919 --> 00:02:15,500 Lo lanzo. 17 00:02:18,490 --> 00:02:21,009 Vemos que el cubo sí que ha resbalado. 18 00:02:21,629 --> 00:02:25,569 Es decir, sí que ha detectado el cero de fricción, pero el cubo no tiene un material físico. 19 00:02:25,689 --> 00:02:29,030 Es decir, que de alguna forma sí que ha ofrecido cierta fricción. 20 00:02:29,389 --> 00:02:35,849 Vamos a comprobarlo porque, insisto, este material que simula el acero no tiene nada de fricción. 21 00:02:36,090 --> 00:02:37,830 Pues se lo voy a poner al cubo. 22 00:02:37,830 --> 00:03:06,900 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. 23 00:03:06,900 --> 00:03:19,259 Porque es curioso. Lo habéis visto, ¿no? Ahora sí caen a la misma velocidad, pero la esfera no gira. 24 00:03:20,699 --> 00:03:34,500 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. 25 00:03:34,500 --> 00:03:39,840 mientras que la esfera, al tener que rotar, pierde fuerza y eso le hace perder aceleración. 26 00:03:39,979 --> 00:03:49,520 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. 27 00:03:49,979 --> 00:03:54,180 ¿Cuál es el problema? El problema con el que nos hemos encontrado es que, bien, hasta ahí todo bien, 28 00:03:54,400 --> 00:04:00,520 pues la teoría de Unity dice que si yo ahora aumentase la resistencia, la fricción del material de madera, 29 00:04:00,520 --> 00:04:20,339 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. 30 00:04:20,339 --> 00:04:45,819 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. 31 00:04:45,819 --> 00:04:48,519 y ahí es donde tenemos el problema 32 00:04:48,519 --> 00:04:51,560 que es que aunque yo le añado una fricción dinámica 33 00:04:51,560 --> 00:04:54,699 al material de acero que lo tiene en la esfera y el cubo 34 00:04:54,699 --> 00:04:57,079 de uno, por ejemplo, recordamos también 35 00:04:57,079 --> 00:05:01,220 que cada material físico tiene un comportamiento 36 00:05:01,220 --> 00:05:04,480 distinto en función de cuando entra en colisión con otro material físico 37 00:05:04,480 --> 00:05:06,579 si obtiene una media de ambos 38 00:05:06,579 --> 00:05:09,360 si aplica el mínimo, el máximo o el multiply 39 00:05:09,360 --> 00:05:12,819 que es multiplicar la fricción de uno 40 00:05:12,819 --> 00:05:17,680 con respecto al otro y así obtener una fricción muchísimo mayor pero bueno lo vamos a dejar en 41 00:05:17,680 --> 00:05:27,759 average para no cambiar mucho y veremos que aún teniendo fricción dinámica el suelo y el acero 42 00:05:27,759 --> 00:05:34,000 es decir el cubo y la esfera la esfera no se ve afectada en ningún caso el cubo como habéis 43 00:05:34,000 --> 00:05:39,819 podido ver ni siquiera se ha movido en esta ocasión es ahora ya la fricción del acero y de 44 00:05:39,819 --> 00:05:43,120 la madera obtiene una media y se queda ahí parado. 45 00:05:43,879 --> 00:05:45,660 Pues bien, tenemos un pequeño problemilla y es que 46 00:05:45,660 --> 00:05:48,860 ¿cómo hacemos que la esfera entienda que está en un 47 00:05:48,860 --> 00:05:51,660 material o en otro? Si yo a la madera le pongo una fricción 48 00:05:51,660 --> 00:05:54,920 de 5, la esfera sigue 49 00:05:54,920 --> 00:05:57,779 cayendo al mismo ritmo y sin embargo el cubo 50 00:05:57,779 --> 00:06:01,040 pues si estuviésemos en un juego en el que muevo las cosas por físicas 51 00:06:01,040 --> 00:06:03,759 me costaría mucho más moverlo. Bueno, vamos a 52 00:06:03,759 --> 00:06:06,759 hacer una solución de baja tecnología pero que 53 00:06:06,759 --> 00:06:09,319 para ir tirándonos valdrá, que es básicamente 54 00:06:09,319 --> 00:06:12,360 decirle a la esfera que cambie 55 00:06:12,360 --> 00:06:15,240 su resistencia al aire en función del material físico con el que ha entrado 56 00:06:15,240 --> 00:06:18,420 en contacto. Y esto realmente es lo que ocurre en la realidad, porque en la realidad 57 00:06:18,420 --> 00:06:21,240 cuando una esfera, por ejemplo, cuando entra en contacto con un material 58 00:06:21,240 --> 00:06:24,139 por ejemplo la hierba, no es que la hierba ofrezca fricción 59 00:06:24,139 --> 00:06:26,939 es que tiene que ir resistiendo a cada brinda de hierba 60 00:06:26,939 --> 00:06:30,000 como si fuese una rampa, igual que cuando entra en gravilla 61 00:06:30,000 --> 00:06:32,839 que realmente es cada grano de gravilla el que está haciendo 62 00:06:32,839 --> 00:06:35,959 que se pare. De hecho 63 00:06:35,959 --> 00:06:39,000 deduzco, pero esto es una suposición mía, que es debido 64 00:06:39,000 --> 00:06:42,139 a que la esfera no tiene apenas superficie de contacto 65 00:06:42,139 --> 00:06:45,120 con el material físico que está tocando 66 00:06:45,120 --> 00:06:47,639 con lo cual al no tener superficie de contacto 67 00:06:47,639 --> 00:06:49,959 la fricción no entra en juego 68 00:06:49,959 --> 00:06:54,300 esa es mi suposición, pero de momento vamos a hacer una solución 69 00:06:54,300 --> 00:06:55,860 insisto, de baja tecnología 70 00:06:55,860 --> 00:06:58,920 y es que he creado un script que paso a explicar 71 00:06:58,920 --> 00:07:01,459 básicamente es, bueno, esto ya lo sabemos 72 00:07:01,459 --> 00:07:03,660 accedemos a nuestro RigidBody del material 73 00:07:03,660 --> 00:07:06,399 accedemos a su componente y hacemos una cosa 74 00:07:06,399 --> 00:07:11,579 O sea, ¿qué es? Primero, bueno, nos aseguramos que el objeto al que hemos aplicado este script tiene RigidBody. 75 00:07:11,699 --> 00:07:14,920 Bueno, comprobación de rutina del programador. 76 00:07:15,439 --> 00:07:21,660 Pero a continuación hago una comprobación, es comprobar si el material con el que hemos entrado en colisión, 77 00:07:21,959 --> 00:07:23,860 recuerdo que estamos en un CollisionEnter, 78 00:07:24,660 --> 00:07:31,079 pues voy a comprobar si ese material, ese objeto con el que he entrado en colisión contiene un SharedMaterial. 79 00:07:31,079 --> 00:07:36,180 SharedMaterial es el material físico de su Collider, de su componente Collider. 80 00:07:36,399 --> 00:07:48,399 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. 81 00:07:48,399 --> 00:08:05,720 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. 82 00:08:05,720 --> 00:08:25,800 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. 83 00:08:25,800 --> 00:08:57,919 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. 84 00:08:57,940 --> 00:08:59,039 de la madera 85 00:08:59,039 --> 00:09:06,279 voy a quitarle un momentito la resistencia al acero 86 00:09:06,279 --> 00:09:10,679 le voy a quitar la resistencia dinámica al suelo 87 00:09:10,679 --> 00:09:18,759 vemos que ahora caen ya los dos, como si no hubiesen mañana 88 00:09:18,759 --> 00:09:23,960 y ahora, si yo le añado cierta fricción dinámica al suelo 89 00:09:23,960 --> 00:09:25,559 por ejemplo de 0,5 90 00:09:25,559 --> 00:09:29,360 el cubo efectivamente empezará a notarlo 91 00:09:29,360 --> 00:09:51,149 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. 92 00:09:51,149 --> 00:09:53,970 no es una solución perfecta 93 00:09:53,970 --> 00:09:56,610 no es desde luego la que más realista es 94 00:09:56,610 --> 00:10:01,090 porque lógicamente si yo juego con fricciones pequeñas 95 00:10:01,090 --> 00:10:04,169 el cubo le costará moverse 96 00:10:04,169 --> 00:10:05,669 ahí está, resbala un poquito 97 00:10:05,669 --> 00:10:07,710 y la esfera obviamente como en el mundo real 98 00:10:07,710 --> 00:10:10,570 resbala muchísimo más porque para eso es una esfera 99 00:10:10,570 --> 00:10:11,669 es como si fuese un rodamiento 100 00:10:11,669 --> 00:10:16,389 pero bueno, con esto consigo cierto control 101 00:10:16,389 --> 00:10:18,929 porque si ahora yo le añado una fricción de dos 102 00:10:18,929 --> 00:10:22,990 pues efectivamente el cubo ya no será capaz de resbalar 103 00:10:22,990 --> 00:10:25,750 y la esfera resbalará también, pero le cuesta 104 00:10:25,750 --> 00:10:28,090 porque tiene una resistencia al aire 105 00:10:28,090 --> 00:10:31,110 y de hecho si le añadiese una resistencia enorme 106 00:10:31,110 --> 00:10:34,230 al material, esto ya sería como velcro 107 00:10:34,230 --> 00:10:37,549 pues eso se le sumará a la resistencia de la esfera 108 00:10:37,549 --> 00:10:41,169 y apenas se moverá, se le quedará efectivamente pegada 109 00:10:41,169 --> 00:10:42,230 como podemos ver 110 00:10:42,230 --> 00:10:45,629 así que ya podemos encontrar un punto intermedio en el que digamos 111 00:10:45,629 --> 00:10:47,669 que me creo que 112 00:10:47,669 --> 00:10:49,210 esa material, por ejemplo, es 113 00:10:49,210 --> 00:10:51,269 gravilla 114 00:10:51,269 --> 00:10:53,750 y a la esfera le cuesta mucho moverse 115 00:10:53,750 --> 00:10:55,230 por esa gravilla 116 00:10:55,230 --> 00:10:58,779 bueno, y ya solo para terminar 117 00:10:58,779 --> 00:11:00,720 esta solución de baja tecnología 118 00:11:00,720 --> 00:11:03,440 lógicamente no solo tenemos que detectar 119 00:11:03,440 --> 00:11:05,019 cuando hemos entrado en contacto con 120 00:11:05,019 --> 00:11:07,159 una superficie distinta 121 00:11:07,159 --> 00:11:09,259 sino también cuando la dejamos, obviamente, porque si no 122 00:11:09,259 --> 00:11:11,059 iría sumando 123 00:11:11,059 --> 00:11:13,120 fricción a fricción y nos volveríamos 124 00:11:13,120 --> 00:11:14,980 locos, entonces he pulido un 125 00:11:14,980 --> 00:11:16,159 poquito el script 126 00:11:16,159 --> 00:11:24,980 de forma que primero tenemos una variable que va a obtener el valor de la resistencia inicial del objeto 127 00:11:24,980 --> 00:11:30,419 para luego poder recuperarla, de forma que por ejemplo cuando entramos en contacto con otro objeto 128 00:11:30,419 --> 00:11:34,740 no se lo sumamos sino que directamente cogemos la inicial y se la sumamos 129 00:11:34,740 --> 00:11:39,720 de forma que si por lo que sea venimos de otra superficie no se sume a la resistencia anterior 130 00:11:39,720 --> 00:11:45,179 sino que ahora que cambie de superficie, pero además si detecta que hemos abandonado una colisión 131 00:11:45,179 --> 00:11:48,000 y ese colisionador que hemos abandonado 132 00:11:48,000 --> 00:11:50,500 tenía un material físico 133 00:11:50,500 --> 00:11:54,179 pues automáticamente vuelva a su resistencia inicial 134 00:11:54,179 --> 00:11:57,240 que cambiará si vuelve a entrar en contacto 135 00:11:57,240 --> 00:11:59,000 con otro material diferente 136 00:11:59,000 --> 00:12:01,980 para comprobarlo pues he mejorado un poquito 137 00:12:01,980 --> 00:12:05,960 la escena anterior, he creado dos suelos 138 00:12:05,960 --> 00:12:09,399 que uno le he aplicado el material físico 139 00:12:09,399 --> 00:12:11,299 del acero, el mismo que tiene la esfera 140 00:12:11,299 --> 00:12:14,639 y el cubo, y otro que ya para que tenga 141 00:12:14,639 --> 00:12:18,539 un poquito más de estética, pues le añadió 142 00:12:18,539 --> 00:12:22,559 una textura para indicar que es el suelo de madera que sí que tiene fricción. Le he puesto una fricción 143 00:12:22,559 --> 00:12:26,700 de 5 al de madera y el de acero 144 00:12:26,700 --> 00:12:30,440 pues sigue teniendo una fricción mínima para que el cubo por lo menos 145 00:12:30,440 --> 00:12:34,419 resbale a través de ella. Entonces ahora vamos a comprobar efectivamente que si 146 00:12:34,419 --> 00:12:38,860 suelto los dos objetos, resbalan 147 00:12:38,860 --> 00:12:41,639 por el acero. Al llegar a la madera 148 00:12:41,639 --> 00:12:46,240 ofrece cierta resistencia por su fricción dinámica y al caer otra vez al siguiente suelo 149 00:12:46,240 --> 00:12:49,320 vuelven a resbalar como si fuese hielo.