#3 Tipos de Colliders. Interacción con RigidBody. [Laberinto en Primera Persona]

Información actualizada sobre esta entrada

Este artículo pertenece a una serie que consiste en hacer un juego simple en primera persona acerca de encontrar objetos dentro de un laberinto. Es una de mis primeras series de cuando empecé el canal, ahora he mejorado mucho este proyecto y puedes descargar el código fuente para importarlo en tu propio proyecto de Unity. Algún día vamos a hacer un remake de esta serie, suscríbete a mi canal para estar al tanto del nuevo contenido sobre Blender, Unity y programación.

Sígueme en itch.io y descarga el código fuente de este proyecto



PUEDES TESTEAR ESTE JUEGO AQUÍ. TAL VEZ TARDE UN POCO EN CARGAR
🔻

MOVEMENT: WASD CAMERA LOOK: MOUSE

Introducción al artículo original

En este artículo vamos a ver los diferentes tipos de Colliders y cómo aplicarlos a nuestro modelos 3D, además vemos cómo interactúan con la componente RigidBody. Los Colliders nos permiten, por ejemplo, evitar que un personaje atraviese objetos o paredes en Unity.

Página principal del proyecto

Vídeo relacionado a este artículo – Tipos de Colliders. Interacción con RigidBody


¿Qué son los Colliders en Unity?

Los Colliders son componentes que podemos asignar a nuestros GameObjects y que permiten que puedan colisionar con otros GameObjects que también tienen asignado Colliders.

Son importantes para lograr colisiones en física, ya que trabajarán en conjunto con las componentes RigidBody. Además nos sirven para limitar los espacios en los que los GameObjects pueden moverse.

Tipos de Colliders en Unity

Comenzamos despejando la escena de los GameObjects que quedaron en el video anterior. Vamos a dejar el pedestal con la espada y el reloj, para poder analizar los distintos tipos de Colliders.

Fig. 1: Estado inicial de la escena para comenzar a trabajar.

La espada y el pedestal son dos objetos separados agrupados bajo un mismo padre, así que podemos seleccionar la espada y apartarla del pedestal (figuras 2 y 3).

Fig. 2: El GameObject espada se encuentra seleccionado en la jerarquía.
Fig. 3: El GameObject espada se aparta del pedestal.

Además vamos a crear un cubo y una esfera haciendo clic derecho en la jerarquía y usando el menú 3D Object. Acomodamos los objetos para que se vean como en la figura 4.

Fig. 4: Arreglo de GameObjects para analizar los distintos tipos de Colliders.

Con el cubo seleccionado, observamos sus propiedades en el inspector. Por defecto viene con varias propiedades incluidas, entre ellas se encuentra una componente Box Collider.

Fig. 5: Visualización del inspector de un GameObject tipo cubo.

Las componentes podemos eliminarlas utilizando el pequeño engranaje de la parte superior derecha de una componente y haciendo clic en Remove Component, como se observa en la figura 6.

Fig. 6: Haciendo clic en el engranaje de la esquina superior derecha podemos eliminar un componente.

En la siguiente figura vemos que la componente Box Collider se ha eliminado.

Fig. 7: El Box Collider ha sido eliminado de las componentes.

Podemos agregar nuevas componentes a nuestros GameObjects haciendo clic en el botón “Add Component”, al hacerlo se nos despliega una ventana con todas las componentes y que cuenta con una barra de búsqueda. Si escribimos “Collider” en la barra de búsqueda podemos observar los distintos tipos de Collider que podemos añadir a nuestro GameObject.

Por supuesto hay Colliders que son más apropiados que otros para un GameObject en particular, esto va a depender de la geometría del GameObject y del uso que vayamos a darle.

Fig. 8: Al pulsar el botón Add Component nos aparece una lista con todos los componentes que podemos agregar al GameObject.

Vamos a desactivar el componente MeshRenderer del cubo para observar mejor el Collider, las componentes suelen traer una pequeña casilla a la izquierda de su nombre para activarlas o desactivarlas.

En la figura 9 observamos que el Box Collider se representa como un Cubo definido por aristas de color verde. Debido a que el GameObject es un cubo, este tipo de Collider encaja perfectamente en su geometría.

Fig. 9: Al apagar el componente Mesh Renderer del GameObject cubo podemos visualizar el Box Collider.

Ahora seleccionemos en la jerarquía el GameObject esfera y veamos sus propiedades en el inspector.

Esta vez tiene asignado un tipo de Collider esférico.

Fig. 10: Visualización del inspector de un GameObject tipo esfera.

Nuevamente desactivamos el componente Mesh Renderer para observar el Collider (figura 11). De nuevo, como se trata de un GameObject esférico el tipo de Collider esférico se ajusta perfectamente a su geometría.

Fig. 11: Al apagar el componente Mesh Renderer del GameObject esfera podemos visualizar el Sphere Collider.

Veamos que pasa con la espada, la seleccionamos en la jerarquía y observamos sus propiedades en el inspector. A diferencia de los dos GameObjects anteriores, la espada no trae asignado un Collider por defecto, debemos asignar uno manualmente como se mostró en la figura 8.

Fig. 12: Seleccionamos la espada que previamente desplazamos del pedestal.

Primero asignamos un Box Collider. En este caso como se observa en la figura 13, vemos que aparece una caja con el mínimo volumen necesario para contener totalmente el GameObject espada.

Fig. 13: GameObject espada con un Box Collider asignado.

Luego probamos con un tipo de Collider esférico. Como se observa en la figura 14, el Collider es una esfera con el radio mínimo tal que la esfera contenga totalmente al GameObject espada.

Fig. 14: GameObject espada con un Sphere Collider asignado.

Ahora vamos a agregarle un Mesh Collider, este tipo de Collider utilizará la geometría del objeto. En la figura 15 se observan sus propiedades en el inspector.

Fig. 15: Se ha agregado un componente Mesh Collider al GameObject espada.

Desactivamos el Mesh Renderer para observar el Collider y lo que vemos es que tiene la forma exacta de la espada, el Collider coincide con el mallado geométrico de triángulos.

Fig. 16: Al apagar el componente Mesh Renderer del GameObject espada, podemos visualizar el Mesh Collider.

Por supuesto esto conlleva mayor complejidad en los cálculos de interacciones con este tipo de Collider, entonces tenemos que decidir si es necesario usarlo, o con un Box Collider nos es suficiente. Todo dependerá del propósito.

Fig. 17: Se observa que el Mesh Collider tiene una geometría compleja, lo que se traduce en mayor tiempo de cómputos.

A continuación vamos a seleccionar el GameObject del reloj en la jerarquía y aplicarle un Mesh Collider pero esta vez haremos clic en la casilla “Convex” que se observa en las propiedades del Collider en la figura 18.

Fig. 18: Se ha añadido un Mesh Collider al GameObject Reloj y se marcó la casilla Convex.

En la figura 19 observamos que ahora el tipo de Collider respeta parcialmente la geometría del objeto. Este tipo de Collider también conlleva mayor cantidad de cálculos, pero no tanto como sería en el caso anterior, es como si tuviésemos un modelo low poly del GameObject.

Además tiene otras ventajas como poder utilizarlo en modo Trigger.

Fig. 19: Se visualiza el Mesh Collider en modo convexo.

Para entender cómo se utilizan los Colliders en modo Trigger te dejo los siguientes dos artículos que forman parte de la Serie Fundamental de Unity.

Método OnTriggerStay para Colliders en modo Trigger

Métodos OnTriggerEnter y OnTriggerExit para Colliders en modo Trigger

Por ahora vimos tres tipos de Colliders: Box Collider, Sphere Collider y Mesh Collider, pudiendo este último ser utilizado en modo Convexo, lo que simplifica la geometría del Collider.

Fig. 20: Resumen de tipos de Colliders.

Comportamiento físico de los Colliders.

Los Colliders se comportan como barreras que no pueden atravesarse entre si. Es decir si nuestro personaje tiene un Collider e intenta atravesar un GameObject que tiene asignado un Collider (como podría ser el cubo o un reloj), no podrá hacerlo. A menos que este Collider esté en modo Trigger.

En la figura 21 se observa que el personaje está parado sobre el reloj, el Collider esférico evita que caiga.

Fig. 21: El jugador se encuentra parado sobre el reloj. El Mesh Collider que tiene asignado evita que el jugador caiga y lo atraviese.

Ahora vamos a situar la esfera suspendida en el aire sobre el cubo (este último fue escalado).

Fig. 22: Se sitúa la esfera suspendida sobre el cubo.

Con la esfera seleccionada hacemos clic en Add Component y dentro de la categoría Physics seleccionamos el componente RigidBody.

Fig. 23: Se añade un componente RigidBody a la esfera.

En la figura 24 se observan los parámetros del componente RigidBody, podemos asignar una masa, activar o desactivar la gravedad y modificar otros parámetros relacionados a la física de un objeto.

Fig. 24: Visualización de los parámetros de la componente RigidBody en el inspector.

Al entrar en el modo juego vemos que la esfera cae como por efecto de la gravedad y colisiona con la esquina del cubo (en realidad la colisión se produce con el Collider).

El componente RigidBody le otorga un comportamiento físico a la esfera.

Fig. 25: La pelota ha caído por efecto del comportamiento gravitatorio que otorga el componente RigidBody.

Agregar Colliders a las piezas del laberinto

Vamos a ir colocando uno por uno todos los prefabricados creados en el video anterior y configurando sus Colliders para que el jugador no pueda atravesar las paredes.

Fig. 26: Abrimos la carpeta donde se encuentran los prefabricados que se hicieron en el video anterior.

Primero la pieza del callejón cerrado. Tomamos el Prefab de la carpeta del proyecto y lo arrastramos a la escena o a la jerarquía. Luego en el inspector hacemos clic en el botón Add Component y elegimos el componente Box Collider.

Fig. 27: Colocamos en la escena la pieza callejón cerrado o “Dead End”.

Vemos en la figura 28 que el Collider cubre totalmente el GameObject, lo cual no nos permitirá caminar en su interior.

Fig. 28: Se ha asignado un Box Collider a la pieza.

La figura 29 muestra que en el modo juego el personaje solo puede avanzar hasta la frontera del Box Collider. Este tipo de Collider no es apropiado para esta pieza.

Fig. 29: El jugador no puede ingresar al espacio entre las paredes debido a que es obstaculizado por el Box Collider.

Tenemos una alternativa, si hacemos clic en el botón “Edit Collider” del Box Collider (figura 30), podremos modificar la posición de sus caras.

Fig. 30: Utilizando el botón Edit Collider podremos editar las dimensiones del Collider.

De esta forma podremos hacer que el Box Collider encierre una parte del objeto.

Fig. 31: Se mueve una de las caras del Collider para que coincida con una de las paredes.

Luego añadiendo más Colliders y repitiendo el proceso anterior para el resto de la geometría del objeto, lograríamos representar con suficiente precisión la frontera del objeto.

Fig. 32: Agregamos dos Box Colliders más y editamos.

En la figura 33 se observa que la superposición de los tres Box Colliders cubre toda la geometría de la pieza y permite que el jugador pueda circular por el interior.

Fig. 33: Utilizando tres Box Colliders se representa la frontea del GameObject.

Lo anterior nos sirve, pero vamos a eliminar todos los Box Colliders y agregar un Mesh Collider en su lugar, en este caso la geometría del muro e bastante simple.

Fig. 34: Con el componente Mesh Renderer desactivado se puede observar el componente Mesh Collider.

Algo muy importante cuando estamos tratando con Prefabs es aplicar los cambios que vamos haciendo, para eso utilizamos el botón Apply que se encuentra en la parte superior del inspector (si tenemos el Prefab seleccionado).

Fig. 35: Es necesario aplicar los cambios que se hacen a un Prefab.

En la figura 36 se observa el modelo del portal con un componente Mesh Collider asignado.

Fig. 36: Mesh Collider asignado a la puerta. Geometría compleja.

No se justifica utilizar un Mesh Collider para este modelo, teniendo en cuenta el uso que le vamos a dar, coloquemos mejor un Box Collider y apliquemos los cambios al Prefab.

Fig. 37: Box Collider asignado a la puerta.

Lo mismo para el modelo del pedestal, con un Box Collider nos alcanza.

Fig. 38: Box Collider asignado al pedestal con la espada.

Los relojes van a ser objetos colectables, es decir cuando el jugador pase por encima de ellos, estos desaparecerán y darán más tiempo de juego.

Teniendo en cuenta el uso que les vamos a dar, vamos a utilizar un Collider esférico, aumentando un poco el radio como se observa en la figura 39.

Fig. 39: Se asigna un Sphere Collider en modo Trigger.

Luego vamos a activar la opción “Is Trigger” de la componente Sphere Collider. Esto hará que el Collider no obstaculice al jugador y permita detectar cuando este entra en la región esférica.

Fig. 40: Activando la casilla “Is Trigger” indicamos que el Collider actuará como Trigger.

Conclusión

En este artículo estudiamos distintos tipos de Colliders y para qué puede ser apropiado cada uno.

Todo depende del propósito que tengamos para el GameObject, por ejemplo en las piezas del laberinto utilizamos Mesh Collider porque necesitamos poder caminar por las regiones interiores del modelo. En cambio en los relojes utilizamo un Collider esférico porque es una pieza que el personaje podrá agarrar.

Los Colliders interactúan entre si y son muy importantes cuando entran en juego las componentes RigidBody, las cuales le dan a los GameObject comportamiento físico.

Salir de la versión móvil
Secured By miniOrange