Quick answer: Godot 4 RigidBody3D impulse applied inside a ShapeCast callback ignored? ShapeCast runs mid-step; impulse queued for next step - use call_deferred or apply after the cast.

Hit detection via ShapeCast; immediate apply_central_impulse; body doesn't move until next physics tick visibly.

Defer the impulse

call_deferred("apply_central_impulse", force). Applied on next tick; cleaner state.

Or apply after the cast loop

Collect targets; apply impulses after the cast completes.

Use linear_velocity directly

Set velocity instead of impulse. Different semantics; simpler for hit-knockback.

“Mid-step impulses queue. Apply at safe boundaries.”

If your hit responses feel delayed, the deferral pattern is the cause. Plan around it.

Related reading