Quick answer: Godot CollisionShape3D toggled to disabled = true but still showing in physics queries? The flag applies on next physics step; same-frame queries see the old state.
An item picked up disables its collider but a trace fired the same frame still hits it. The change deferred to next physics step.
set_deferred Apply
shape.set_deferred("disabled", true)Deferred set applies at next idle frame — for some flags, this is the path that actually takes effect cleanly without same-frame conflicts.
Free Instead of Disable
For permanent removals, queue_free() the shape. The physics server unregisters it next tick. Cleaner than carrying disabled state.
Layer Mask Alternative
For per-frame toggling, change collision_layer to 0. Other bodies’ masks no longer intersect; effective disable without state lag.
Verifying
Disabled colliders don’t appear in traces. Re-enabling works on next physics tick.
“Same-frame disable doesn’t apply. set_deferred or zero the layer.”
For pickups, zero the layer instead of toggling disabled — physics keeps the body but it stops interacting; resume by restoring the layer.