Si tu objeto con BoxCollider
detecta colisiones incorrectas o tiene comportamientos inesperados, sigue estos pasos para solucionarlo.
✅ Corrige colisiones fantasma o erróneas.
✅ Evita que objetos atraviesen otros sin motivo.
✅ Optimiza el rendimiento y la precisión de la física.
🔹 1. Verificar la Escala del Objeto (Transform > Scale
)
Un BoxCollider
puede comportarse de manera extraña si el objeto tiene una escala negativa o una escala no uniforme.
📌 Cómo Verificarlo:
- Selecciona el objeto en la
Jerarquía
(Hierarchy
). - Ve al
Inspector
y revisaTransform > Scale
. - Si los valores de
Scale
son negativos o muy pequeños (< 0.1
), cámbialos a positivos y razonables (1.0
).
⚠️ Problema: Unity no admite BoxCollider
con escala negativa, lo que puede provocar errores.
🔹 2. Ajustar el Tamaño del BoxCollider
Manualmente
Si el BoxCollider
tiene un tamaño incorrecto, ajusta su propiedad Size
manualmente en el Inspector
.
📌 Cómo Ajustarlo:
- Selecciona el objeto en la Jerarquía.
- En el
Inspector
, ve alBoxCollider
. - Modifica
Size
en lugar de cambiar la escala del objeto. - Si el
BoxCollider
está desalineado, ajustaCenter
.
💡 Consejo: Usa Gizmos
(Shift + G
) en la escena para visualizar el BoxCollider
.
🔹 3. Revisar los Rigidbodies
de los Objetos
Para que las colisiones funcionen correctamente, al menos uno de los objetos en colisión debe tener un Rigidbody
.
📌 Cómo Configurarlo:
- Selecciona el objeto que debe moverse (por ejemplo, el
Jugador
). - En el
Inspector
, haz clic enAdd Component > Rigidbody
. - Si no quieres que el objeto sea afectado por la gravedad, activa
Is Kinematic
.
⚠️ Problema: Sin Rigidbody
, Unity puede no detectar las colisiones correctamente.
🔹 4. Usar Is Trigger
si el Objeto Solo Debe Detectar Colisiones
Si el objeto solo debe detectar la colisión sin bloquear el paso del jugador, usa Is Trigger
.
📌 Cómo Activarlo:
- Selecciona el objeto en la
Jerarquía
. - En el
Inspector
, marcaIs Trigger
en elBoxCollider
. - Usa
OnTriggerEnter()
en lugar deOnCollisionEnter()
en tu código.
💡 Ejemplo de Código con OnTriggerEnter()
:
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log("El jugador ha entrado en la zona.");
}
}
🔹 5. Evitar Que los Objetos Atraviesen las Colisiones (Continuous Collision Detection
)
Si los objetos atraviesan colisiones en movimiento rápido, ajusta la detección de colisión en el Rigidbody
.
📌 Cómo Configurarlo:
- Selecciona el objeto en la
Jerarquía
(Ejemplo:Jugador
). - Ve al
Inspector
y selecciona elRigidbody
. - Cambia
Collision Detection
deDiscrete
aContinuous
.
⚠️ Problema: La configuración Discrete
puede hacer que los objetos atraviesen colisiones a alta velocidad.
🔹 6. Ajustar la Layer Collision Matrix
para Evitar Colisiones Inesperadas
Si un objeto está colisionando con cosas que no debería, usa la Layer Collision Matrix
para evitar colisiones innecesarias.
📌 Cómo Ajustarlo:
- Ve a
Edit > Project Settings > Physics
. - Busca la
Layer Collision Matrix
. - Desactiva las casillas de colisión entre capas que no deben colisionar.
💡 Ejemplo:
- Si tienes una capa
"Enemigos"
y"Paredes"
, puedes evitar que los enemigos colisionen con las paredes desactivando"Enemigos x Paredes"
.
🔹 7. Alternativa: Usar MeshCollider
en Lugar de BoxCollider
Si el objeto tiene una forma compleja y el BoxCollider
no encaja bien, usa un MeshCollider
.
📌 Cómo Cambiarlo:
- Selecciona el objeto en la Jerarquía.
- Elimina el
BoxCollider
. - Añade
MeshCollider
(Add Component > MeshCollider
). - Si el objeto es dinámico, marca
Convex
.
⚠️ Nota: MeshCollider
consume más rendimiento que BoxCollider
.
🎯 Resultado Final
✅ Las colisiones se detectan correctamente.
✅ Los objetos no atraviesan colisiones inesperadas.
✅ Los BoxCollider
tienen el tamaño adecuado y sin escala negativa.
✅ Se optimiza la detección de colisiones con Continuous
y Layer Collision Matrix
.
