Переопределяемые функции
Класс Node в Godot предоставляет виртуальные функции, которые можно переопределить для обновления узлов в каждом кадре или при определенных событиях, например, когда они попадают в дерево сцены.
В этом документе представлены те из них, которые вы будете использовать чаще всего.
См. также
По сути, эти функции используют низкоуровневую систему уведомлений Godot. Подробнее о ней см. Уведомления Godot.
Помимо конструктора класса, инициализировать и получать узлы позволяют две функции: _enter_tree() и _ready().
Когда узел попадает в дерево сцены, он становится активным, и движок вызывает его метод _enter_tree(). Дочерние элементы этого узла могут ещё не быть частью активной сцены. Поскольку узлы можно удалять и добавлять заново в дерево сцены, эта функция может вызываться несколько раз в течение жизненного цикла узла.
В большинстве случаев вместо этого вы будете использовать _ready(). Эта функция вызывается только один раз за время существования узла, после _enter_tree(). _ready() гарантирует, что все дочерние элементы первыми вошли в дерево сцены, поэтому вы можете безопасно вызвать для них get_node().
См. также
Чтобы узнать больше о получении ссылок на узлы, прочитайте Узлы и экземпляры сцены.
Другой связанный обратный вызов — _exit_tree(), который движок вызывает каждый раз, когда узел собирается покинуть дерево сцены. Это может происходить при вызове Node.remove_child() или при освобождении узла.
# Called every time the node enters the scene tree.
func _enter_tree():
pass
# Called when both the node and its children have entered the scene tree.
func _ready():
pass
# Called when the node is about to leave the scene tree, after all its
# children received the _exit_tree() callback.
func _exit_tree():
pass
// Called every time the node enters the scene tree.
public override void _EnterTree()
{
base._EnterTree();
}
// Called when both the node and its children have entered the scene tree.
public override void _Ready()
{
base._Ready();
}
// Called when the node is about to leave the scene tree, after all its
// children.
public override void _ExitTree()
{
base._ExitTree();
}
Два виртуальных метода _process() и _physics_process() позволяют обновлять узел, каждый кадр и каждый кадр физики соответственно. Подробнее см. в специальной документации: Idle и Physics Processing.
# Called every frame.
func _process(delta):
pass
# Called every physics frame.
func _physics_process(delta):
pass
public override void _Process(double delta)
{
// Called every frame.
base._Process(delta);
}
public override void _PhysicsProcess(double delta)
{
// Called every physics frame.
base._PhysicsProcess(delta);
}
Две другие важные встроенные функции обратного вызова узла — это Node._unhandled_input() и Node._input(), которые используются для получения и обработки отдельных событий ввода. Метод _unhandled_input() принимает каждое нажатие клавиши, щелчок мыши и т. д., которые ещё не были обработаны в функции обратного вызова _input() или в компоненте пользовательского интерфейса. Вы хотите использовать его для ввода в игровом процессе в целом. Функция обратного вызова _input() позволяет перехватывать и обрабатывать события ввода до того, как их получит _unhandled_input().
Дополнительную информацию о входных данных в Godot см. в разделе Input section.
# Called once for every event.
func _unhandled_input(event):
pass
# Called once for every event before _unhandled_input(), allowing you to
# consume some events.
func _input(event):
pass
// Called once for every event.
public override void _UnhandledInput(InputEvent @event)
{
base._UnhandledInput(@event);
}
// Called once for every event before _UnhandledInput(), allowing you to
// consume some events.
public override void _Input(InputEvent @event)
{
base._Input(@event);
}
Есть ещё несколько переопределяемых функций, например: Node._get_configuration_warnings(). Специализированные типы узлов предоставляют больше обратных вызовов, например: CanvasItem._draw() для программного рисования или Control._gui_input() для обработки щелчков и ввода на элементах пользовательского интерфейса.