Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Переопределяемые функции
Класс 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() для обработки щелчков и ввода на элементах пользовательского интерфейса.