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.
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).
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.
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.
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.
En la siguiente figura vemos que la componente Box Collider se ha eliminado.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Ahora vamos a situar la esfera suspendida en el aire sobre el cubo (este último fue escalado).
Con la esfera seleccionada hacemos clic en Add Component y dentro de la categoría Physics seleccionamos el componente RigidBody.
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.
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.
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.
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.
Vemos en la figura 28 que el Collider cubre totalmente el GameObject, lo cual no nos permitirá caminar en su interior.
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.
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.
De esta forma podremos hacer que el Box Collider encierre una parte del objeto.
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.
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.
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.
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).
En la figura 36 se observa el modelo del portal con un componente Mesh Collider asignado.
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.
Lo mismo para el modelo del pedestal, con un Box Collider nos alcanza.
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.
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.
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.