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.

Related reading