Quick answer: Unity CharacterController.OnControllerColliderHit not firing on glancing collisions? Hit callback requires a perpendicular component above the slope limit - lower the slope or use Physics.OverlapCapsule for detection.
Player slides along a wall. Audio cue tied to OnControllerColliderHit fires only on direct hits.
Use OverlapCapsule
Physics.OverlapCapsuleNonAlloc(
bot, top, radius, results);Per-frame overlap check. Catches every contact, not just the slope-filtered ones.
Reduce slope limit temporarily
For specific zones, lower the controller's Slope Limit. Glancing contacts now register as hits.
Or use a child trigger
Trigger collider as a child of the player. OnTriggerEnter fires reliably; gameplay logic moves there.
“CharacterController callbacks are filtered. Filters drop the contacts you didn't think to allow.”
For audio/VFX feedback on movement, OverlapCapsule per frame is the safe primitive. Trigger callbacks miss too many cases.