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.