Quick answer: rb.AddForce(dir * strength, ForceMode2D.Force) in FixedUpdate. Impulse only for one-shot bumps.

Coin magnet pulls coin toward player. Coin lurches and bounces past target. Per-frame Impulse stacks.

The Fix

void FixedUpdate() {
    Vector2 dir = (target.position - rb.position);
    float dist = Mathf.Max(dir.magnitude, 0.5f);
    Vector2 force = dir.normalized * (strength / (dist * dist));
    rb.AddForce(force, ForceMode2D.Force);
}

Force is continuous; framerate-independent. Inverse-square falloff feels organic. Min distance cap stops infinite force at center.

Verifying

Coin smoothly arcs toward player. Velocity caps via Linear Drag on the rigidbody.

“Force not impulse. Per FixedUpdate. Smooth pull.”

Related Issues

For BuoyancyEffector2D, see buoyancy. For 2D slope, see slope.

Force smooth. Impulse jolts.