
Unity3D : El motor de físicas.
Buenos días a todos y bienvenidos a un nuevo artículo del blog de Espai. Como lo prometido es deuda hoy vamos a hablar de Unity3D, en concreto del motor de físicas.
Bajo ese nombre tan raruno tenemos una de las grandes bazas de Unity, que nos permitirá dar un gran realismo a nuestras aplicaciones/videojuegos y a la vez nos evitará «reinventar la rueda» en cada proyecto.
Pero en Unity3D ¿Qué hace el motor de físicas?
Esta parte de Unity «aplica» las leyes físicas a nuestros objeto, de forma que estos se verán afectados por la gravedad y los otros objetos. Por ejemplo, unobjeto caerá al vacío si no está apoyado sobre una superficie fija. También se moverá si otro objeto choca contra él, con más o menos velocidad según la masa de los 2 objetos.
Vamos a ver estos conceptos en un ejemplo práctico, y para ello vamos a retomar nuestro ejercicio del artículo anterior.
¿Cómo podemos aplicarlo?
Por defecto los objetos no reaccionan al chocar, ni se ven afectados por la gravedad. Para que eso suceda debemos agregarles un componente de tipo RigidBody. Esto es lo que tenemos inicialmente:
pulsad en el boton «Add Component» en medio a la derecha
después escribir «Rigid» y saldrá algo como lo siguiente:
selecciona RigidBody (el primero). Observa que aparecen un nuevo conjunto de opciones para ese objeto:
En realidad por ahora no hay que tocarlas. Simplemente guarda, y ejecuta el proyecto usando el botón Play (arriba en el centro)
Como puedes comprobar, el objeto cae a plomo hasta… En realidad, hasta el infinito porque no encontrará nada que lo frene. Si comparamos este comportamiento con el anterior, antes de añadir el RigidBody, verás que antes el objeto estaba inmóvil, como congelado en el aire. Si quieres probarlo de nuevo, puedes deshabilitar el RigidBody con la soguiente opción:
(Cuando acabes las pruebas, recuerda volver a añadir el RigidBody)
Colisionando con otros objetos
Bien, ya tenemos un objeto cayendo hasta el infinito sin un final a la vista (algo así como el prestigio de nuestro gobierno). Eso no nos sirve de gran cosa (ejem, me refiero a el objeto) asi que vamos a crear un «suelo» donde éste pueda asentarse.
Vamos a crear un cubo debajo del nuestro, que va a ser casi plano y mas extenso que nuestro objeto. Así actuará como base, podeis ver el resultado en la siguiente imagen:
Si ahora ejecutáis de nuevo, veréis que el cubo choca con la base y se detiene. Si os preguntáis porqué el suelo no «cae», recordad que no le hemos aplicado un RigidBody, y que por defecto los GameObjects en Unity no lo usan.
Materiales físicos
Cuando hablamos del mundo real, en el podemos encontrar materiales con propiedades muy diversas. Por ejemplo, no es lo mismo tirar al suelo una pelota de goma que un cenicero de cristal… Uno es flexible y rebota, y el otro no. Unity está preparado para recrear este comportamiento, y es usando los materiales físicos.
Para utilizarlos antes deberemos descargarlos, sigue los siguientes pasos para añadirlos a tu proyecto:
Click derecho sobre un espacio en blanco en «Assets»
En la ventana que aparecerá, pulsamos en «Import» y ya los tendremos.
Para aplicar estos materiales, deberemos seleccinar el cubo y en el componente «Box Collider» cambiar su material físico:
Ahora seleccionamos «Bouncy». Es un material flexible que «rebota» sobre las superficies.
Después de este último paso, solo nos resta poner en marcha el proyecto. Pulsamos play y como veréis, el cubo comienza a rebotar sobre el suelo.
Podéis hacer pruebas, como rotar liberamente el cubo en el plano de la vertical. Así cuando rebote, acabará fuera de la superficie y cayendo al vacío. Y lo mejor de todo esto: Sin una sola línea de programación!
Espero que os haya resultado interesante el artículo sobre Unity3D, en el siguiente seguiremos profundizando en esta estupenda herramienta para desarrollar videojuegos.
Saludos!