Si tu método OnTriggerEnter() no se activa o funciona de manera incorrecta, puede deberse a errores en la configuración del Collider, Rigidbody o en el código.
✅ Soluciona problemas de detección de colisiones con OnTriggerEnter().
✅ Asegura que los Colliders y Rigidbodies están correctamente configurados.
✅ Evita que los objetos atraviesen colisiones sin detectarlas.
🔹 1. Configurar los Colliders Correctamente
Para que OnTriggerEnter() funcione, uno de los dos objetos en la colisión debe tener un Rigidbody.
📌 Paso 1: Revisar el Collider del Objeto
- Selecciona el objeto que debe detectar la colisión (
Ejemplo: Jugador). - En el
Inspector, verifica que tenga unCollider(BoxCollider,SphereCollider, etc.). - Marca
Is Trigger✅ para que elColliderfuncione conOnTriggerEnter().
⚠️ Problema común: Si Is Trigger está desactivado, el evento OnTriggerEnter() no se activará.
🔹 2. Asegurar que al Menos un Objeto Tiene Rigidbody
📌 Paso 2: Revisar el Rigidbody
- Selecciona el objeto en la
Jerarquía(Ejemplo: Jugador). - En el
Inspector, haz clic enAdd Component > Rigidbody. - Si el objeto no debe ser afectado por la física, activa
Is Kinematic✅.
💡 Reglas básicas de colisión en Unity:
| Jugador (Collider) | Objeto (Collider) | Rigidbody Requerido | OnTriggerEnter() Funciona |
|---|---|---|---|
❌ Is Trigger ❌ | ❌ Is Trigger ❌ | ✅ Uno de los dos debe tener Rigidbody | ❌ No funciona |
✅ Is Trigger ✅ | ❌ Is Trigger ❌ | ✅ Uno de los dos debe tener Rigidbody | ✅ Funciona |
❌ Is Trigger ❌ | ✅ Is Trigger ✅ | ✅ Uno de los dos debe tener Rigidbody | ✅ Funciona |
⚠️ Si ninguno de los objetos tiene Rigidbody, OnTriggerEnter() no funcionará.
🔹 3. Revisar el Código de OnTriggerEnter()
Si OnTriggerEnter() sigue sin funcionar, revisa tu código y asegúrate de que:
✅ El Collider que entra tiene el Tag correcto.
✅ El método tiene la sintaxis correcta.
✅ El Debug.Log imprime mensajes en la Console.
📌 Paso 3: Usar un Código Correcto
using UnityEngine;
public class DetectarColision : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player")) // Asegurar que el objeto tiene el Tag correcto
{
Debug.Log("¡Colisión detectada con el jugador!");
}
}
}
🔹 4. Asegurar que el Tag del Jugador es Correcto
Si CompareTag("Player") no está funcionando, revisa el Tag del jugador.
📌 Paso 4: Verificar el Tag
- Selecciona el
Jugadoren la Jerarquía. - En el
Inspector, asegúrate de que suTages"Player". - Si
"Player"no existe, agrégalo enAdd Tag > + Playery asígnalo.
💡 Prueba sin CompareTag() para ver si la colisión se detecta:
private void OnTriggerEnter(Collider other)
{
Debug.Log("Colisión detectada con: " + other.gameObject.name);
}
Si ves el nombre del objeto en la Console, el problema está en el Tag.
🔹 5. Usar OnTriggerStay() para Detección Continua
Si OnTriggerEnter() no se activa de inmediato, prueba OnTriggerStay(), que se ejecuta mientras el objeto permanece dentro del Collider.
📌 Ejemplo: OnTriggerStay()
private void OnTriggerStay(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log("El jugador sigue dentro del trigger.");
}
}
🔹 6. Evitar que los Objetos Atraviesen el Collider
Si el objeto atraviesa el Collider antes de que OnTriggerEnter() se active, aumenta la detección de colisiones en el Rigidbody.
📌 Paso 5: Configurar Collision Detection
- Selecciona el objeto con
Rigidbody. - En el
Inspector, cambiaCollision DetectiondeDiscreteaContinuous.
💡 Útil para objetos que se mueven rápido y atraviesan colisiones.
🔹 7. Revisar la Layer Collision Matrix
Si el objeto debería colisionar pero no lo hace, puede ser porque las capas (Layers) no permiten la colisión.
📌 Paso 6: Revisar la Configuración de Física
- Ve a
Edit > Project Settings > Physics. - Busca la
Layer Collision Matrix. - Asegúrate de que las capas correctas tienen activadas las colisiones entre sí.
💡 Ejemplo: Si el Jugador está en la capa "Player" y el Enemigo en "Enemies", activa "Player x Enemies".
🎯 Resultado Final
✅ OnTriggerEnter() se activa correctamente.
✅ Los Colliders y Rigidbodies están bien configurados.
✅ El Tag del jugador está correcto.
✅ No hay colisiones inesperadas ni atravesamientos.

