Up to date

This page is up to date for Godot 4.1. If you still find outdated information, please open an issue.

Overridable functions

Godot’s Node class provides virtual functions you can override to update nodes every frame or on specific events, like when they enter the scene tree.

This document presents the ones you’ll use most often.

See also

Under the hood, these functions rely on Godot’s low-level notifications system. To learn more about it, see Godot notifications.

Two functions allow you to initialize and get nodes, besides the class’s constructor: _enter_tree() and _ready().

When the node enters the Scene Tree, it becomes active and the engine calls its _enter_tree() method. That node’s children may not be part of the active scene yet. As you can remove and re-add nodes to the scene tree, this function may be called multiple times throughout a node’s lifetime.

Most of the time, you’ll use _ready() instead. This function is called only once in a node’s lifetime, after _enter_tree(). _ready() ensures that all children have entered the scene tree first, so you can safely call get_node() on it.

See also

To learn more about getting node references, read Nodes and scene instances.

Another related callback is _exit_tree(), which the engine calls every time a node exits the scene tree. This can be when you call Node.remove_child() or when you free a node.

GDScriptC#

  1. # Called every time the node enters the scene tree.
  2. func _enter_tree():
  3. pass
  4. # Called when both the node and its children have entered the scene tree.
  5. func _ready():
  6. pass
  7. # Called when the node is about to leave the scene tree, after all its
  8. # children received the _exit_tree() callback.
  9. func _exit_tree():
  10. pass
  1. // Called every time the node enters the scene tree.
  2. public override void _EnterTree()
  3. {
  4. base._EnterTree();
  5. }
  6. // Called when both the node and its children have entered the scene tree.
  7. public override void _Ready()
  8. {
  9. base._Ready();
  10. }
  11. // Called when the node is about to leave the scene tree, after all its
  12. // children.
  13. public override void _ExitTree()
  14. {
  15. base._ExitTree();
  16. }

The two virtual methods _process() and _physics_process() allow you to update the node, every frame and every physics frame respectively. For more information, read the dedicated documentation: Idle and Physics Processing.

GDScriptC#

  1. # Called every frame, as often as possible.
  2. func _process(delta):
  3. pass
  4. # Called every physics frame.
  5. func _physics_process(delta):
  6. pass
  1. public override void _Process(double delta)
  2. {
  3. // Called every frame, as often as possible.
  4. base._Process(delta);
  5. }
  6. public override void _PhysicsProcess(double delta)
  7. {
  8. // Called every physics frame.
  9. base._PhysicsProcess(delta);
  10. }

Two more essential built-in node callback functions are Node._unhandled_input() and Node._input(), which you use to both receive and process individual input events. The _unhandled_input() method receives every key press, mouse click, etc. that have not been handled already in an _input() callback or in a user interface component. You want to use it for gameplay input in general. The _input() callback allows you to intercept and process input events before _unhandled_input() gets them.

To learn more about inputs in Godot, see the Input section.

GDScriptC#

  1. # Called once for every event.
  2. func _unhandled_input(event):
  3. pass
  4. # Called once for every event, before _unhandled_input(), allowing you to
  5. # consume some events.
  6. func _input(event):
  7. pass
  1. // Called once for every event.
  2. public override void _UnhandledInput(InputEvent @event)
  3. {
  4. base._UnhandledInput(@event);
  5. }
  6. // Called once for every event, before _unhandled_input(), allowing you to
  7. // consume some events.
  8. public override void _Input(InputEvent @event)
  9. {
  10. base._Input(@event);
  11. }

There are some more overridable functions like Node._get_configuration_warnings(). Specialized node types provide more callbacks like CanvasItem._draw() to draw programmatically or Control._gui_input() to handle clicks and input on UI elements.