Los rigidbodies como referencias de física en Unity 3D
Una de las partes más interesantes a la hora de utilizar un motor gráfico como Unity3d para realizar nuestros videojuegos, es la posibilidad de poder hacer uso de los motores de físicas que llevan integrados. Unity no es una excepción como ya hemos mencionado e integra el motor gráfico de Nvidia PyshicsX para poder dotar a nuestros proyectos de unas físicas realistas que le darán un toque muy especial y haciendo que esta integración sea fácil y sencilla.
Tabla de contenidos
Unity y las físicas
Unity nos ofrece componentes tanto para crear físicas en 2D como en 3D, aunque como podemos imaginar si conocemos un poco este motor gráfico, la integración de físicas en 2D o en 3D es muy similar, y se hace uso en los dos casos de componentes similares como pueden ser rigidbodies, colliders o joints. También nos podemos imaginar que los componentes referentes a 3D son algo más complejos que los basados en dos únicas dimensiones. Veamos una pequeña introducción a la integración del motor de físicas incorporado en Unity y en especial a un componente imprescindible para el uso de las mismas en nuestro proyecto, el Rigidbody.
El Rigidbody y su importancia
Como ya hemos mencionados uno de los componentes clave en el uso de físicas dentro de Unity es el Rigidbody. Una vez que apliquemos este componente a nuestro objeto seremos capaces de detectar y crear colisiones entre nuestro objeto y otros que existan en la escena, le podremos aplicar diferentes tipos de fuerzas a nuestro objeto para que emule su comportamiento en la vida real y además este se verá afectado por la gravedad del mundo que tengamos definida en nuestra escena.
En principio un objeto que posea el componente Rigidbody no debería ser movido o rotado modificando los valores de su transform directamente, deberíamos hacer que se moviese aplicando a este fuerzas o a través de las colisiones que se generen al chocar contra otros objetos de la escena. Por contra hay veces que necesitamos mover un objeto que posea Rigidbody directamente actuando sobre su transform, para esos casos deberíamos activar la propiedad isKinematic de nuestro Rigidbody. También tenemos la posibilidad de ir activando y desactivando la propiedad isKinematic a través de código según nos convenga, modificando así el comportamiento de nuestro objeto en determinados momentos del juego. Mientras la opción de isKinematic esté activada nuestro rigidbody no se verá afectado por fuerzas, colisiones ni por la gravedad, pero sí afectará a las físicas de otros objetos de la escena.
Colliders el complemento perfecto a los Rigidbodies
Hemos hablado varias veces de las colisiones hasta ahora, pero cómo se calculan las colisiones en Unity. Para poder detectar colisiones Unity hace uso de unos componentes llamados colliders. Un collider no es más que una estructura que envuelve a nuestro objeto y que nos ayuda a determinar si este entra en contacto con otros. Es recomendable hacer uso de ciertos colliders que tienen como forma figuras geométricas simples como pueden ser el cubo, la cápsula o la esfera. El uso de este tipo de colliders simplifica los cálculos de de las colisiones, pero hay situaciones en las que necesitamos una detección mucho más precisa y en esas ocasiones hacemos uso de un collider específico llamado Mesh Collider.
En el momento de crear nuestra escena, tenemos que tener en cuenta que todos aquellos objetos que vayan a ser estáticos pero con los que podamos colisionar deben tener el componente collider, pero no el componente rigidbody, si fuese así estaríamos haciendo que la escena realizase un montón de cálculos de físicas que no necesitamos para nada, ya que los objetos estáticos no se van a mover. Este error podría afectar considerablemente al rendimiento de nuestro proyecto.
El uso de colliders puede ir un poco más allá, ya que los podemos usar también como si fuesen triggers, un trigger detectará la colisión del objeto pero lo dejará atravesar y no afectará a sus físicas. Es decir, podemos usar triggers para, por ejemplo, delimitar áeras o zonas en nuestra escena. Sería similar al uso de sensores para abrir puertas de forma automática, podemos detectar cuando un objeto entra en contacto con el trigger, deja de estar en contacto con el mismo, o incluso, detectar mientras ambos estén en contacto. Para modificar el comportamiento del collider y convertirlo en un trigger simplemente tenemos que activar la opción isTrigger de nuestro componente collider.
Como hemos visto el uso de físicas en Unity, es realmente sencillo y fácil de implementar, pero le da un amplio abanico de posibilidades a nuestra imaginación a la hora de integrar diferentes mecánicas dentro de nuestro juego. En artículos posteriores podremos ver como tenemos otro componente importante y muy versátil en el uso de físicas dentro de Unity como puede ser el uso de los diferentes tipos de joints que Unity nos ofrece.
¿Qué utilidades le darías a las físicas dentro de un juego? Déjanos tu comentario
Curso relacionado: Curso Superior de Diseño y Desarrollo de Videojuegos con Unity 3D