Quick answer: Unity 2D effectors still pushing objects after Time.timeScale = 0? Effectors run on FixedUpdate which still fires once at the boundary - check rigidbody simulated flag, not timeScale.

Pause menu opens. A point effector keeps dragging the player towards it for a few frames before stopping.

Disable simulation per body

rb.simulated = !paused;

The rigidbody's simulated property is the supported way to opt out of physics callbacks. Time.timeScale = 0 stops accumulation but leaves one fixed step's queued forces in flight.

Or globally suspend Physics2D

Physics2D.simulationMode = SimulationMode2D.Script; stops the engine from advancing entirely. Resume with SimulationMode2D.FixedUpdate. Slightly heavier than per-body, but trivially correct.

Don't rely on autoSimulation

The legacy Physics2D.autoSimulation property is deprecated since Unity 2022. New projects should treat simulationMode as the source of truth.

“Pause systems built on timeScale always leak. Always.”

Move your pause to a global Pause manager that tags every relevant subsystem (audio, particles, physics, animator) and toggles each one explicitly.