Quick answer: Godot PhysicsServer3D.set_active(false) not actually pausing physics? It stops the server’s tick but bodies still receive forces from gameplay code — pause the tree instead.

An intro scene needs physics frozen; calling set_active(false) doesn’t stop falling objects because gameplay code keeps integrating.

Server Tick vs Body Integration

set_active controls whether the physics server steps. Forces queued for bodies still arrive on the next active step; pre-paused queued state may carry over.

Pause via Tree

get_tree().paused = true

The canonical pause. Stops _physics_process across the project (subject to process_mode). Far more predictable than server-level toggling.

Re-Activate Carefully

Re-enabling the server after a long inactive period can produce huge delta on first step. Clamp delta or briefly disable physics-driven motion at unpause.

Verifying

Pause freezes everything. Resume produces no large spikes or unexpected motion.

“Server set_active doesn’t pause gameplay. Use SceneTree.paused for whole-game freeze.”

Reserve PhysicsServer toggles for surgical optimizations (disable physics in cutscenes) and let SceneTree.paused handle the common case.