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 = trueThe 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.