Trabajo con la física de Unity. La idea del post es ver cómo funciona la física “realista” del motor, ver algunos efectos como viento, centro gravitatorio, etc. También mostrar algunos vínculos que se pueden crear entre determinados objetos. Por último, mostrar cómo crear materiales físicos como hielo o goma, según sea el caso.
Buenas!
Antes que nada quería comentar que agregué un versionado a los archivos que uso en el tutorial. Ahora pueden bajar la parte que corresponde a cada video (con los anteriores no lo hice, lo pueden hacer a partir de este).
La idea de este post es que vean un poco de la física de Unity3D, sobre cómo trabaja en general, y algunos efectos. Vamos a comenzar mostrando una diferencia que se produce comúnmente, que ya había comentado en otros videos, sobre el transform y el rigidbody. Ambos funcionan diferente, aunque comúnmente se use el transform para mover al objeto. A veces cuesta acostrumbrarse a no usarlo, principalmente a los que venimos de la vieja escuela, en donde se programaba sin física, y sólo la usabamos si era explícitamente necesario (tema de recursos, principalmente).
En este caso la física que vamos a ver no es para un tipo de personaje en particular, sino para objetos que llevan física lo más cercana a la realidad. Digo cercanas, o uso comillas para resaltar que no es del todo real. Por una cuestión de que para que se acerque a la realidad deberían estar presentes muchos factores físicos como el aire, junto con la resistencia que este pone, por no hablar de factores termodinámicos que tampoco existen en Unity.
Bien… Hechas las aclaraciones, vamos a empezar con la primer parte del tutorial, que es un poco de manipulación de la física y algunas uniones (joints).
Les dejo ACÁ los assets del proyecto hasta donde terminó el video, para que puedan resolver los ejercicios.
A continuación vamos a ver cómo se pueden hacer uniones. Las mismas básicamente están pensadas para vincular objetos entre sí, y que cada uno aplique determinada fuerza y/o reacción sobre el otro. Les voy a mostrar algunos ejemplos y usos comunes, pero pueden ser creativos y empezar a probar para ver ustedes mismos los resultados (les aconsejo que lo hagan cualquiera sea el caso). Sigamos entonces con JOINTS!
LINK con el estado del proyecto hasta acá.
Estos fueron algunos de los tipos de uniones que hay. Si escriben “Joint” al agregar un componente van a ver que salen una lista interminable de uniones. Algunas son exclusivamente para 3D. Prueben las que les gusten más. Tengan en cuenta que todas son variaciones del mismo concepto, o sea: vincular dos objetos entre sí. Las principales variaciones son los efectos que producen dichos agarres sobre cada una de las partes. Algunas parecen agarradas por una especie de caño u objeto duro, y otras parecen vinculadas por alguna especie de soga. Insisto en que prueben e intenten hacer algunos efectos locos como para ver las cosas que se pueden lograr.
Una cosa que me parece importante que tengan en cuenta durante el proceso es que traten de que haya una coherencia entre los pesos y las masas que manejen de cada objeto. Recuerden que hay una diferencia importante entre PESO y MASA. Les aclaro esto porque la física de Unity, como la de muchos motores, no tiene un montón de elementos como control de la estructura del cuerpo. O sea, que si tiro un objeto de 1000 KG sobre uno de 1 KG, Unity no puede romperlo. Por muchos motivos, uno de ellos es que ni siquiera sabe qué tipo de objeto es. Así que lo que se va a producir en dicho caso es una incoherencia física, y mientras una parte le diga “sos más pesado, baja“, la otra le va a decir “te estás incrustando, salí“. Para evitar ese tipo de situaciones, es para lo que les sugiero que pongan siempre valores que sean dentro de todo coherentes los unos de los otros.
Bien… Sigamos! Vamos a ver ahora algunos efectos físicos. La idea es que los usemos para elaborar cosas como viento, o incluso un campo gravitatorio.
LINK con los assets con todos los effectors.
A continuación, traten de hacer un nivel que utilice TODOS los effectors vistos en el video anterior. A ver qué sale! La idea es que los utilicen como práctica y para ejercitar un poco la creatividad. Tengan en cuenta que incluso los pueden combinar para lograr un efecto en particular que ustedes deseen. Pruebenlo antes de seguir con el siguiente video. ;).
La última parte que queda sería ver un poco los materiales físicos. Imaginemos que queremos crear algún objeto que sea de metal, madera, goma, hielo, etc. Cada uno reaccionaría frente a otro de distintas maneras. Una de esas formas ya las vimos, cambiando la masa y/o el peso cuando sea más “pesado” el objeto. Pero… Qué pasaría cuando un objeto de madera cae sobre uno de goma? O cuando uno de metal cae sobre hielo? Para cada uno de esos casos, podemos asignar materiales físicos.
Además, otra de las cosas que quería que vean es cómo funciona el script “Physics2D” de Unity, ya que el mismo nos permite predecir con qué golpearía un objeto, calcular si hay algo en una dirección determinada, saber cuáles son todos los objetos que están dentro de un área específica, etc. Vamos con el video!
LINK con el proyecto terminado.
Y terminamos! Con esto deberían tener las herramientas suficientes para encarar juegos que requieran exclusivamente de la física. Por supuesto, también pueden hacer que objetos físicos funcionen en un mundo en el que no todo es con física. La realidad es que no ni SIEMPRE van a necesitar la física ni NUNCA. Para algunas cosas es bastante necesario que gasten recursos en cálculos, para que quede bien.
Algo que me parece importante destacar, es que siempre que hagan objetos como personajes o enemigos, muy probablemente no quieran ponerle la física de Unity (ni de ningún motor), puesto que el personaje NO ES, mayoritariamente, un objeto físico más, sino que tiene su propia física. Juegos como Megaman aplican esto. Megaman no es una caja con física, sino un personaje, con la física hecha específicamente para que se mueva “bien” a lo largo de las plataformas. Con esto no quiero decir que no le pongan un Rigidbody, sino que no lo hagan depender “ENTERAMENTE” de la física, ya que puede llegar a hacer cosas como caerse de lado si alguien lo empuja mucho.
Cualquier duda que tengan no duden en consultar!
Un saludo.