Qué es una colisión en Unreal (y por qué importa para mecánicas)
En Unreal, una colisión es la forma en que un componente “responde” cuando otro componente intenta ocupar el mismo espacio. Esa respuesta puede ser física (chocar y detenerse), lógica (detectar presencia) o ninguna (ignorar). Para diseñar mecánicas comunes (recoger objetos, abrir puertas por proximidad, activar plataformas), necesitas dominar tres piezas: presets, canales y respuestas (Block/Overlap/Ignore), además de elegir el componente de colisión adecuado (Box, Sphere, Capsule).
Presets, canales y respuestas: el “contrato” de colisión
Respuestas: Block, Overlap, Ignore
- Block: hay choque. Puede generar eventos de impacto (Hit) si hay movimiento y colisión bloqueante.
- Overlap: no bloquea el movimiento, pero sí detecta superposición. Genera eventos Begin/End Overlap si están habilitados.
- Ignore: no interactúa; no bloquea ni detecta.
Canales de colisión (Object Type y Trace Channels)
Unreal clasifica “qué soy” y “cómo me detectan” mediante canales:
- Object Type: el tipo del objeto (por ejemplo Pawn, WorldDynamic, PhysicsBody).
- Trace Channels: canales usados por raycasts/traces (por ejemplo Visibility, Camera) y también para configurar respuestas.
Cuando dos componentes se encuentran, Unreal evalúa las respuestas configuradas para cada canal. La regla práctica: si cualquiera de los dos ignora, no pasa nada; si alguno bloquea y el otro no ignora, hay bloqueo; si ambos permiten overlap (y ninguno bloquea), hay superposición.
Presets (Collision Presets)
Los presets son configuraciones predefinidas que agrupan Object Type + respuestas por canal. Aceleran el trabajo y reducen errores. Ejemplos típicos: BlockAll, OverlapAllDynamic, Pawn, Trigger. Puedes empezar con un preset y luego ajustar en Details > Collision.
Componentes de colisión: Box, Sphere y Capsule
Para triggers y detección, lo habitual es usar un componente de colisión simple (más barato y predecible que colisión compleja de malla):
- Escuche el audio con la pantalla apagada.
- Obtenga un certificado al finalizar.
- ¡Más de 5000 cursos para que explores!
Descargar la aplicación
- Box Collision: ideal para zonas rectangulares (puertas, plataformas, áreas).
- Sphere Collision: ideal para proximidad radial (pickups, zonas de aura).
- Capsule Collision: ideal para personajes o zonas alargadas con extremos redondeados.
Recomendación: para mecánicas, usa un componente dedicado (Box/Sphere/Capsule) como “sensor” y deja la malla visual aparte. Así puedes cambiar el tamaño del trigger sin tocar el arte.
Eventos clave: Overlap vs Hit (cuándo usar cada uno)
OnComponentBeginOverlap / OnComponentEndOverlap
Úsalos cuando quieras detectar presencia sin bloquear: entrar/salir de un área, proximidad, activar/desactivar algo mientras el jugador está dentro.
- Requiere que el componente tenga Generate Overlap Events activado.
- Las respuestas de colisión deben permitir Overlap entre los canales relevantes (por ejemplo, Trigger vs Pawn).
OnHit (impacto)
Úsalo cuando necesitas choque real (Block) y datos de impacto (normal, impulso, punto de contacto). Casos: proyectiles que golpean, objetos físicos que colisionan, daño por impacto.
- Requiere colisión en modo Block entre los objetos.
- En muchos casos necesitas Simulation Generates Hit Events (si hay física) o que el movimiento genere hits (por ejemplo, ProjectileMovement).
Regla rápida
- Trigger / zona → Overlap (Begin/End).
- Choque / golpe / rebote → Hit.
Práctica 1: Pickup que se destruye al recoger
Objetivo
Crear un actor de pickup que detecte al jugador al entrar en su esfera y se destruya (y opcionalmente dispare lógica como sumar puntos).
Configuración del Blueprint del Pickup
- Crea un Blueprint Actor:
BP_Pickup. - Añade componentes:
- Static Mesh (visual).
- Sphere Collision (sensor). Colócala como root o como hijo; lo importante es que sea el componente que detecta.
- Selecciona Sphere Collision y en Details > Collision:
- Collision Presets: prueba
Triggercomo base. - Generate Overlap Events: activado.
- Verifica que la respuesta a Pawn sea Overlap.
- Collision Presets: prueba
Lógica con OnComponentBeginOverlap
- En el Event Graph, selecciona la Sphere Collision y añade el evento:
OnComponentBeginOverlap (SphereCollision). - Desde el pin
Other Actor, filtra para asegurarte de que es el jugador. Opciones comunes:- Comparar con
Get Player Character. - O comprobar si implementa una interfaz o tiene un tag (si ya lo usas en tu proyecto).
- Comparar con
- Si es el jugador: ejecuta
Destroy ActorsobreSelf.
// Pseudoflujo Blueprint (conceptual) OnComponentBeginOverlap (Sphere) -> Branch (OtherActor == GetPlayerCharacter) -> DestroyActor(Self)Errores típicos y checklist
- No se dispara el overlap: revisa Generate Overlap Events en ambos componentes (pickup y cápsula del jugador).
- El jugador “choca” con el pickup: la esfera está en Block; cambia a Overlap para Pawn.
- Se dispara con otros objetos: ajusta respuestas por canal o filtra por actor/clase/tag.
Práctica 2: Puerta automática por proximidad (abre al entrar, cierra al salir)
Objetivo
Una puerta que se abre cuando el jugador entra en un Box Trigger y se cierra cuando sale. Aquí es donde BeginOverlap y EndOverlap trabajan en pareja.
Componentes
- Crea
BP_AutoDoor(Actor). - Añade:
- Static Mesh para la puerta (DoorMesh).
- Box Collision como zona de proximidad (ProximityBox).
- Configura ProximityBox:
- Preset:
Trigger(o Custom). - Generate Overlap Events: activado.
- Respuesta a Pawn: Overlap.
- Preset:
Animación simple con Timeline (apertura/cierre)
Usa un Timeline para interpolar la rotación o la posición de la puerta.
- Crea un Timeline
TL_Doorcon una pista float de 0 a 1 (por ejemplo 0.0 en t=0, 1.0 en t=0.5). - En
Update, interpola entre rotación cerrada y abierta. Ejemplo conceptual:Lerp (Rotator)o ajustarSetRelativeRotationcon un yaw multiplicado por el alpha.
Eventos de overlap
OnComponentBeginOverlap (ProximityBox): si el Other Actor es el jugador →Playdel Timeline.OnComponentEndOverlap (ProximityBox): si el Other Actor es el jugador →Reversedel Timeline.
BeginOverlap -> Play TL_Door EndOverlap -> Reverse TL_DoorDetalles importantes
- Si hay varios actores entrando/saliendo (por ejemplo NPCs), considera contar cuántos están dentro (un contador) para no cerrar cuando aún queda alguien dentro.
- Asegúrate de que el Box Trigger sea más grande que la puerta para que el jugador lo active antes de chocar.
Práctica 3: Plataforma que se activa al pisarla
Dos enfoques: Overlap (sensor) vs Hit (pisada con bloqueo)
Para “pisar” una plataforma, puedes:
- Overlap: una Box Collision encima de la plataforma detecta al jugador. Ventaja: simple y estable.
- Hit: usar el choque real con la plataforma (Block) y reaccionar al impacto. Útil si necesitas datos de impacto o si la plataforma es física.
Enfoque recomendado (Overlap con sensor)
- Crea
BP_PressurePlatform. - Componentes:
- Static Mesh (PlatformMesh).
- Box Collision (StepTrigger) colocada ligeramente por encima de la superficie.
- Configura StepTrigger: Preset Trigger, Overlap con Pawn, Generate Overlap Events activado.
- En
OnComponentBeginOverlap (StepTrigger): si es el jugador → activar (por ejemplo cambiar material, encender luz, mover plataforma, habilitar otra mecánica). - Opcional: en
OnComponentEndOverlapdesactivar.
Enfoque alternativo (OnHit)
Si quieres activar al recibir un golpe:
- Asegura que PlatformMesh tenga colisión en Block contra Pawn.
- Activa Simulation Generates Hit Events si aplica (especialmente si hay física).
- Usa
OnComponentHit (PlatformMesh)y filtra por el jugador.
Nota: OnHit puede dispararse múltiples veces por fricción o micro-impactos; suele requerir lógica extra (cooldown, “ya activado”, etc.).
Verificación y depuración de colisiones (imprescindible)
Visualizar colisiones
- En el viewport del editor, selecciona el componente de colisión (Box/Sphere/Capsule) y ajusta su tamaño con los handles.
- En el menú de visualización del viewport, usa modos de depuración para ver colisiones (por ejemplo, mostrar colisión simple). Según versión, puedes encontrarlo en opciones de Show del viewport.
Revisar ajustes en Details
Cuando algo no dispara eventos, revisa en este orden:
| Elemento | Qué revisar | Valor típico |
|---|---|---|
| Componente sensor | Collision Presets / Custom | Trigger o Custom |
| Componente sensor | Generate Overlap Events | On |
| Componente sensor | Respuesta a Pawn | Overlap |
| Jugador (cápsula) | Generate Overlap Events | On |
| Ambos | ¿Alguno está en Ignore? | No |
| Para Hit | Block + Hit Events | Block y Hit habilitado |
Depurar con prints y datos del evento
En BeginOverlap/Hit, imprime información para confirmar qué está ocurriendo:
Other ActoryOther Comp(qué te está tocando).- En Hit:
Hit Normal,Impact Point(útil para efectos).
// Pseudoflujo: OnBeginOverlap -> PrintString(OtherActor DisplayName) // Pseudoflujo: OnHit -> PrintString(ImpactPoint)Ajustes finos comunes
- Si un trigger “falla” cuando el jugador va rápido, agranda el volumen o evita geometrías muy finas.
- Si el trigger se activa desde lejos, revisa el tamaño real del componente (a veces está escalado por el parent).
- Si la malla tiene colisión compleja que interfiere, separa: malla visual sin eventos + componente simple dedicado para eventos.