En este tutorial, aprenderás a detectar colisiones entre el jugador y los enemigos en Unity usando OnTriggerEnter() o OnCollisionEnter().
✅ Funciona para detectar cuando el jugador toca un enemigo.
✅ Puede activar eventos como «Game Over», perder vida, o empujar al jugador.
✅ Compatible con Rigidbody y Collider.
🔹 1. Configurar el Jugador y el Enemigo Correctamente
Para que la detección de colisiones funcione, debes asegurarte de que uno de los dos objetos (jugador o enemigo) tenga un Rigidbody y que ambos tengan Colliders.
📌 Paso 1: Configurar el Jugador
- Selecciona el objeto
Jugadoren la Jerarquía (Hierarchy). - Añade un
Rigidbodyal Jugador (Add Component > Rigidbody). - Configura el
Rigidbody:- Activa
Is Kinematicsi el jugador no usa física. - Desactiva
Use Gravitysi el jugador no necesita caer.
- Activa
- Asegura que tiene un
Collider(BoxCollider,CapsuleCollider, etc.). - Dale el
Tag«Player» (Inspector > Tag > Player).
📌 Paso 2: Configurar el Enemigo
- Selecciona el
Enemigoen la Jerarquía. - Asegura que tiene un
Collider(BoxCollider,CapsuleCollider, etc.). - Si usas
OnTriggerEnter(), activaIs Triggeren elCollider. - Dale el
Tag«Enemigo» (Inspector > Tag > Enemigo).
🔹 2. Detectar Colisiones con OnTriggerEnter()
Si marcaste Is Trigger en el Collider del enemigo, usa este método.
📌 Paso 3: Crear el Script DetectarColision.cs
- En la carpeta
Scripts(Assets/Scripts), crea un nuevo script (Right Click > Create > C# Script). - Nómbralo
DetectarColisiony ábrelo. - Pega este código en el
Jugador:
using UnityEngine;
public class DetectarColision : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Enemigo")) // Verifica si el objeto tocado es un enemigo
{
Debug.Log("¡El jugador ha sido golpeado por un enemigo!");
// Aquí puedes llamar a un método de Game Over, restar vida, etc.
// Ejemplo: FindObjectOfType<GameOverManager>().ActivarGameOver();
}
}
}
🔹 3. Detectar Colisiones con OnCollisionEnter()
Si NO marcaste Is Trigger en el Collider del enemigo, usa este método.
📌 Código para Detección con OnCollisionEnter()
using UnityEngine;
public class DetectarColision : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Enemigo")) // Verifica si el objeto tocado es un enemigo
{
Debug.Log("¡El jugador ha chocado contra un enemigo!");
// Aquí puedes activar Game Over, perder vida, etc.
}
}
}
🔹 4. Asignar el Script al Jugador
- Selecciona el
Jugadoren la Jerarquía. - Arrástrale el script
DetectarColision.cs(Add Component > DetectarColision).
🎯 Resultado Final
✅ Si el jugador toca un enemigo, se detectará la colisión.
✅ El evento se imprimirá en la Console (Debug.Log).
✅ Puedes añadir efectos como «Game Over» o restar vida.
