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.