Capítulo 3: ¡Interacciones Básicas – Introducción a los Colliders y la Detección de Colisiones!
En el capítulo anterior, logramos que nuestro cubo se moviera por la escena. ¡Ahora es el momento de hacerlo interactuar con el mundo que lo rodea! En este capítulo, aprenderemos sobre los Colliders y cómo Unity detecta cuando los objetos se tocan o chocan.
Paso 1: Creando un Segundo GameObject
Para que nuestro cubo interactúe con algo, necesitamos otro objeto en la escena. Vamos a crear una plataforma.
- Ve a la ventana de Jerarquía.
- Haz clic derecho en cualquier espacio vacío dentro de la ventana.
- En el menú contextual, selecciona “3D Object” y luego haz clic en “Plane“.
- Selecciona el “Plane” en la ventana de Jerarquía.
- En la ventana de Inspector, vamos a ajustar su tamaño para que sea una plataforma más grande:
- En la sección Transform, cambia el valor de Scale en los ejes X e Z a 5. Deja el valor de Y en 1. Esto hará que el plano sea más ancho y largo.
- También puedes cambiar la Position del “Plane” a (0, 0, 0) para que esté en el origen de la escena.
Paso 2: Añadiendo Colliders a Nuestros GameObjects
Para que Unity pueda detectar cuando nuestros objetos se tocan, ambos deben tener un Collider adjunto. Un Collider es un componente que define el contorno físico de un objeto para propósitos de colisión.
- Añadiendo un Collider al Cubo:
- Selecciona el GameObject “Cube” en la ventana de Jerarquía.
- En la ventana de Inspector, haz clic en el botón “Add Component”.
- En la barra de búsqueda, escribe “Box Collider” y selecciónalo. Verás que un componente “Box Collider” se ha añadido al Cubo. Este collider se ajusta automáticamente a la forma del cubo.
- Añadiendo un Collider al Plano:
- Selecciona el GameObject “Plane” en la ventana de Jerarquía.
- En la ventana de Inspector, haz clic en el botón “Add Component”.
- En la barra de búsqueda, escribe “Mesh Collider” y selecciónalo. Verás que un componente “Mesh Collider” se ha añadido al Plano. Un Mesh Collider utiliza la forma exacta del objeto para la detección de colisiones, lo cual es adecuado para objetos con formas irregulares, pero para un plano simple como este, un “Box Collider” también funcionaría y podría ser más eficiente en términos de rendimiento. Para este tutorial, usaremos un “Box Collider” para el plano por simplicidad:
- En la barra de búsqueda, escribe “Box Collider” y selecciónalo (si ya añadiste un “Mesh Collider“, puedes hacer clic en el icono de los tres puntos al lado del nombre del componente y seleccionar “Remove Component” antes de añadir el “Box Collider“).
Paso 3: Introducción a la Detección de Colisiones con un Script
Ahora vamos a escribir un nuevo script para detectar cuándo nuestro cubo choca con el plano.
- Ve a la ventana de Proyecto.
- Haz clic derecho en cualquier espacio vacío, selecciona “Crear” y luego “C# Script“.
- Nombra este script “DetectarColision” y haz doble clic para abrirlo en tu editor de código.
Paso 4: Escribiendo el Código de Detección de Colisiones
Reemplaza el contenido del script “DetectarColision.cs” con el siguiente código:
using UnityEngine;
public class DetectarColision : MonoBehaviour
{
void OnCollisionEnter(Collision collision)
{
// Este método se llama cuando este GameObject (al que está adjunto este script)
// comienza a colisionar con otro GameObject con un Collider.
Debug.Log("¡Colisión detectada con: " + collision.gameObject.name + "!");
// Puedes añadir aquí más lógica para responder a la colisión,
// como cambiar el color del objeto, activar una animación, etc.
}
void OnCollisionStay(Collision collision)
{
// Este método se llama cada frame mientras este GameObject está
// en contacto con otro GameObject con un Collider.
// Debug.Log("Siguiendo la colisión con: " + collision.gameObject.name);
}
void OnCollisionExit(Collision collision)
{
// Este método se llama cuando este GameObject deja de colisionar
// con otro GameObject con un Collider.
// Debug.Log("¡Colisión finalizada con: " + collision.gameObject.name + "!");
}
}
- Guarda el script.
Explicación del Código:
- void OnCollisionEnter(Collision collision): Esta es una función especial de Unity que se llama automáticamente cuando el Collider del GameObject al que está adjunto este script comienza a tocar el Collider de otro GameObject. El parámetro Collision collision contiene información sobre la colisión, como el otro GameObject involucrado.
- Debug.Log(“¡Colisión detectada con: ” + collision.gameObject.name + “!”);: Esta línea utiliza Debug.Log() para mostrar un mensaje en la ventana de Consola de Unity cuando ocurre una colisión. collision.gameObject.name nos da el nombre del GameObject con el que estamos colisionando.
- void OnCollisionStay(Collision collision): Esta función se llama cada frame mientras los dos Colliders permanecen en contacto.
- void OnCollisionExit(Collision collision): Esta función se llama cuando los dos Colliders dejan de tocarse.
Paso 5: Adjuntando el Script al Cubo
Queremos detectar cuando el cubo colisiona con el plano, así que adjuntaremos este script al cubo.
- Selecciona el GameObject “Cube” en la ventana de Jerarquía.
- Arrastra el script “DetectarColision.cs” desde la ventana de Proyecto hasta la ventana de Inspector del Cubo (justo debajo del script “MoverCubo”).
Paso 6: ¡Probando la Detección de Colisiones!
- Asegúrate de que el cubo esté inicialmente por encima del plano en la ventana de Escena (puedes ajustar su Position en el Inspector).
- Haz clic en el botón de “Play” en la Barra de Herramientas.
- Utiliza las teclas de movimiento para mover el cubo hacia el plano y hacer que lo toque.
- Observa la ventana de Consola (puede que necesites abrirla desde el menú “Window” -> “General” -> “Console” si no está visible). Deberías ver el mensaje “¡Colisión detectada con: Plane!” aparecer una vez cuando el cubo entre en contacto con el plano.
¡Felicidades! Has implementado la detección de colisiones básica en Unity. Has aprendido cómo añadir Colliders a tus objetos y cómo utilizar el script OnCollisionEnter() para responder cuando ocurre una colisión.
En el próximo capítulo, exploraremos cómo hacer que esta interacción sea más visual y dinámica. ¡Sigue aprendiendo!