Quick answer: Both components need bGenerateOverlapEvents = true, and each must have its collision response to the other’s channel set to Overlap (not Block, not Ignore).
A trigger volume bound to OnComponentBeginOverlap never fires even though a character clearly walks through it. The response is set to Ignore or one side has overlap events disabled.
Two Flags, Two Channels
For an overlap event to fire:
- Both components have Generate Overlap Events = true.
- Component A’s response to B’s ObjectType is Overlap.
- Component B’s response to A’s ObjectType is Overlap.
Block fires hit events instead. Ignore fires nothing. Both sides must opt in.
Check the Channel
Open each component’s Collision section. Verify Collision Enabled is at least Query Only, and inspect the channel matrix — the cross-cell between the two object types must say Overlap.
Custom Channels Are Common
Most projects add custom channels (Pickup, Interaction). Make sure both your trigger and the actor that should overlap use compatible channels — not the default Visibility/Camera ones.
Verify with showdebug collision
Run the game with showdebug collision. You can see exactly which channels each component blocks/overlaps in real time — far faster than guessing in the inspector.
Verifying
Walk through the trigger; BeginOverlap fires once. Walk out; EndOverlap fires. Block-only volumes still hit-stop the character without firing overlap.
“Overlap requires opt-in on both sides plus events enabled. Block, Ignore, or events-off and you get silence.”
Define a small set of custom channels with clear names — ‘Interaction’, ‘Trigger’, ‘Pickup’ — not the generic ones. The collision matrix becomes self-documenting.