Quick answer: Unity CharacterController isGrounded returning false on slightly bumpy terrain? Step Offset must exceed the small variations the controller would otherwise consider as falling.

Player jumps spuriously over tiny terrain bumps because isGrounded flips to false mid-step. Step Offset is 0.1; terrain variation is 0.15.

Increase Step Offset

CharacterController.stepOffset = 0.4 (for a roughly meter-tall character). Steps below that height are climbed automatically; isGrounded stays true.

Slope Limit

Combine with slopeLimit (typically 45-60°). Anything steeper isn’t grounded even if the controller touches it.

Skin Width

Skin width (default 0.08) lets the controller penetrate slightly. Too small = ground-detection flicker; too large = floating. Tune per character.

Coyote Time

Cache last-grounded frame; allow jumps within 100-200ms of leaving ground. Makes platforming feel responsive without faking grounded.

Verifying

Player runs smoothly over uneven terrain. isGrounded stays stable; no phantom jumps or stuck states.

“Bump step offset above terrain variation. Add coyote time for feel.”

If you find isGrounded jittering, profile its frame-by-frame value — the cause is almost always step-offset / skin-width tuning.