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.