Qué son las colisiones y físicas 3D en Unity
Para dar vida a nuestros videojuegos el uso de un motor gráfico es algo que nos pone las cosas mucho más fáciles. Y si hay un elemento que puede aportar algo especial a nuestro juego es el uso de los motores de físicas que la mayoría de motores gráficos, como puede ser el caso de Unity3d, llevan integrados dentro de su IDE. Unity, evidentemente, no es una excepción en este aspecto y es por eso que el motor integra el sistema de cálculo de físicas desarrollado por Nvidia, PyshicsX. Gracias al uso de este sistema podremos dotar a nuestros juegos y nuestros proyectos de unas físicas realistas que le proporcionarán un toque de autenticidad a nuestro videojuego, teniendo además, este sistema, una integración fácil, intuitiva, rápida y sencilla. En este post vamos a ver los aspectos más importantes de la integración de los motores de físicas en Unity y los diferentes componentes que podemos encontrar para ese fin.
El sistema de físicas en Unity
Dada la versatilidad de la que hace gala Unity, pudiendo crear a su vez proyectos en 2D así como proyectos en 3D, en el caso de la integración de las físicas no podíamos esperar algo menos. Y es por eso que el motor gráfico permite la integración de físicas orientadas a entornos 2D como a 3D, el sistema de físicas es muy similar en los dos casos, haciendo uso de componentes parecidos como pueden ser los rigidbodies, los colliders o los joints, pero añadiendo variedades para cada uno de ellos dependiendo del sistema de cámaras que estemos dispuesto a usar en nuestro proyecto.
El Rigidbody masa y gravedad dentro de Unity
El rigidbody es uno de los componentes cruciales cuando hablamos de físicas dentro de Unity, al asignar este componente a nuestro gameobject haremos que este sea capaz de detectar colisiones, podremos modificar su velocidad, aplicarle fuerzas o verlo afectado por la gravedad, entre otras cosas. Gracias a este componente nuestro objeto tendrá un comportamiento de masa y gravedad similar a un objeto de la vida real, algo que nos ayudará mucho en la programación de saltos o caídas de objetos.
Si nuestro objeto tiene el componente de Rigidbody deberemos intentar siempre mover o rotar este objeto modificando las propiedades físicas de este objeto, ya sea aplicando una fuerza o incluso modificando su velocidad. Pero no sería conveniente modificar directamente las posiciones y rotaciones del objeto mediante otro tipo de componentes como podría ser el componente Transform. En el caso de que debamos mover el objeto usando este último componente deberíamos hacer que el componente Rigidbody presente en el objeto no se vea afectado por las fuerzas del mundo que lo rodea, para ello simplemente bastará con modificar la propiedad isKinematic.
Los Colliders base fundamental de las físicas
Como hemos dicho anteriormente que un objeto tenga un componente Rigidbody va a permitir que nuestro objeto detecte y genere colisiones con otros objetos, pero para que esto pueda ser realmente así hace falta otro componente estrella, en cuanto a físicas se refiere. Estos componentes son los llamos Colliders. Un collider es una estructura, normalmente con formas geométricas primitivas, que nos permite delimitar una zona de contacto, al tener esta zona de contacto delimitada podemos ver si un objeto entra en contacto, está todavía en contacto o acaba de dejar de estar en contacto con nuestro objeto.
El uso de formas geométricas primitivas agiliza los cálculos de las colisiones físicas simplificando los cálculos que se han de realizar para estos, pero si necesitamos tener una detección totalmente precisa deberíamos hacer uso del collider llamado Mesh Collider, que creará una versión simplificada de nuestra malla para intentar ajustar lo máximo posible la detección de las colisiones.
Los colliders no nos permiten simplemente detectar o realizar colisiones, tienen un uso realmente interesante usándolos no como un objeto sólido sino como un Trigger. Un trigger no es más que una zona delimitada en la que podemos detectar si un objeto entra en contacto con ella, si todavía está en contacto o dentro de ella, o si acaba de dejar de estar en contacto con ella, hasta aquí podríamos decir que es lo mismo que un collider, pero la diferencia es que un objeto que su collider está marcado como trigger, usando la propiedad isTrigger, puede ser atravesado por cualquier otro objeto a pesar de que este último tenga también un collider y un rigidbody. Un claro ejemplo sería crear un sensor en una puerta automática, cuando el personaje entre en el trigger situado delante de la puerta podemos detectar su presencia para realizar la animación que abra la puerta para poder pasar.
Otro de los componentes que podemos combinar con los ya vistos hasta ahora es el de los Joints, estos componentes nos permiten crear ciertos tipos de estructuras como pueden ser muelles, cuerdas, bisagras, entre muchos otros.
¿Crees que es útil el uso de las físicas en los videojuegos? Déjanos tu comentario
Curso relacionado: Curso Superior de Diseño y Desarrollo de Videojuegos con Unity 3D