Quick answer: Unity FixedUpdate sometimes called 3-4 times per frame when fixed step is small? Engine catches up; gameplay code in FixedUpdate sees the multiplied calls.

Player position updates 60Hz physics. On a low-end device at 30fps, position updates 90 times per second; movement is too fast.

Cap maximum substeps

Time.maximumAllowedTimestep = 0.05f;

Engine stops catching up beyond this. Sim slows under load; better than fast.

Use Time.fixedDeltaTime

FixedUpdate's delta is fixed; uniform across substeps. Position updates with this delta are deterministic.

Profile per-substep cost

Profile Window > FixedUpdate count per frame. Spikes diagnose the catch-up.

“FixedUpdate is rate-stable; not call-count-stable. The difference matters.”

If your gameplay depends on per-frame counts, FixedUpdate is the wrong primitive. Use Update with delta time.

Related reading