Pausing games and process mode
To pause the game the pause state must be set. This is done by assigning to the SceneTree.paused property:
GDScript C#
GetTree().Paused = true;
Doing this will cause two things. First, 2D and 3D physics will be stopped for all nodes. Second, the behavior of certain nodes will stop or start depending on their process mode.
Note
The physics servers can be made active while the game is paused by using their set_active
methods.
Each node in Godot has a “Pause Mode” that defines when it processes. It can be found and changed under a node’s Node properties in the inspector.
You can also alter the property with code:
GDScript C#
public override void _Ready()
PauseMode = Node.PauseModeEnum.Process;
}
This is what each mode tells a node to do:
Inherit: Process depending on the state of the parent, grandparent, etc. The first parent that has a non-Inherit state.
Stop: Stop the node no matter what (and children in Inherit mode). When paused this node will not process.
Process: Process the node no matter what (and children in Inherit mode). Paused or not this node will process.
The , _physics_process
, _input
, and _input_event
functions will not be called. However signals still work and cause their connected function to run, even if that function’s script is attached to a node that has its pause mode set to “Stop”.
Animation nodes will pause their current animation, audio nodes will pause their current audio stream, and particles will pause. These resume automatically when the game is no longer paused.
It is important to note that even if a node is processing while the game is paused physics will NOT work for it by default. As stated earlier this is because the physics servers are turned off. The physics servers can be made active while the game is paused by using their set_active
methods.
Here is an example of a pause menu. Create a popup or panel with controls inside, and set its pause mode to “Process” then hide it. By setting the root of the pause popup to “Process”, all children and grandchildren will inherit that state. This way, this branch of the scene tree will continue working when paused.
Finally, make it so when a pause button is pressed (any button will do), enable the pause and show the pause screen.
GDScript C#
public void _on_pause_button_pressed()
GetNode<Control>("pause_popup").Show();
}
GDScript C#
public void _on_pause_popup_close_pressed()
{
GetNode<Control>("pause_popup").Hide();