生命周期 - 单次执行周期

节点的生命周期是指节点从出生(创建)到死亡(删除)的过程,这个过程中有几个关键的时间点,我们可以在这些时间点编写我们的逻辑代码,承载这些代码的方法就被称为生命周期方法。

我们之前见过 _ready_process 方法,它俩就是两个最常见的生命周期方法。

[!tip]

生命周期方法不需要我们手动调用,Godot 会在内部自动调用它们。

_enter_tree

这个生命周期方法会在节点进入到场景树时执行,也就是节点出现时执行。

注意不要和下面的 _ready 搞混,在执行 _enter_tree 生命周期方法时可能还没有子节点,因为子节点还没有加入到场景树中。

_ready

当节点完全准备好时执行。

完全准备好是指子节点都执行完毕 _ready_enter_tree 方法,并且当前节点执行完 _enter_tree 方法。

区分 _enter_tree 和 _ready

假设现在有一个这样的场景:

Control
    LineEdit
    TextureRect

其中 Control 节点有两个子节点,分别是 LineEdit 和 TextureRect,并给他们三个都加上相同的脚本:

extends Node

func _enter_tree():
    # name 是指节点的名字
    print (name + " enter tree")

func _ready():
    print (name + " ready")

运行场景后,我们会看到这样的输出结果:

Control enter tree
LineEdit enter tree
TextureRect enter tree
LineEdit ready
TextureRect ready
Control ready

可见 _enter_tree 会最先执行,且父节点优先执行,而 _ready 最后执行,且父节点排在最后。

_exit_tree 节点离开场景树

顾名思义,当节点离开场景树时执行,且子节点优先执行。