Godot的Using SceneTree从场景与节点的关系开始:场景是节点的集合,进入场景树后才成为活动对象。文档进一步说明,节点直接或间接连接到root Viewport时,就成为场景树的一部分。因此,“这份场景包含某节点”与“该节点目前已经在活动场景树里”并不是可以省略条件后互换的说法;两者之间还有进入树这一联系。[1]

SceneTree本身也不是某个场景文件的别名。文档将它介绍为场景系统向OS提供的主循环实现,运行场景时会自动实例化并设置。它包含root Viewport,首次打开的场景可以作为其子项加入树。主循环、根视口与场景节点因而处于不同层次:场景系统提供活动结构,场景的节点再进入这份结构,而不是每个场景都自行成为同一个根视口。[1]

root Viewport的创建身份由文档另外说明。场景中可以有其他视口,但这个根视口由SceneTree内部自动创建。[1]

根采用Viewport类型,还联系到显示容纳。文档说这个节点包含主视口,Viewport的子节点默认绘制在该视口内。根的位置不只给节点联系提供顶端,也联系子项默认显示在哪个范围。场景中可以出现的其他视口,同样仍是Viewport类型;它们的存在不把根视口的自动创建身份转交给每一个视口。这个关系解释根的结构背景,不改变后文进入、ready与退出各自的通知方向。[1]

节点进入树后,文档将它同处理、输入、二维与三维显示、通知及声音等活动能力联系起来;离开树时失去这些能力。[1]

进入通知采用父先子后的方向。Overridable functions特别提醒,父节点的_enter_tree发生时,它的孩子可能还没有进入活动场景。它又说,节点可以从树中移出后再加入,因此进入通知可能在节点一生中发生多次。这让“对象已经存在多久”与“这一次何时进入活动树”成为两个问题,不能仅用构造对象的一次时点替代后者。[2]

ready是文档在树顺序中强调的重要例外:父节点的_ready要等所有孩子的_ready之后才发生,原文用后序遍历描述这层关系。以一个父节点和若干孩子作文字示意,只能据此确定父亲在孩子就绪之后就绪;它与进入时父亲先收到通知形成对照。[1]

退出通知又有自己的方向。Using SceneTree把场景或其一部分被移除时的退出描述为自下而上,Overridable functions的对应说明也是孩子先收到_exit_tree,之后才轮到父节点。[1][2]

本文限官方仓库master两份文字,不称4.5或stable承诺,未运行脚本或查看图像,不规定兄弟节点顺序和ready终身次数。[1][2]

资料来源:
[1] [Using SceneTree — godot-docs master](https://github.com/godotengine/godot-docs/blob/master/tutorials/scripting/scene_tree.rst)
[2] [Overridable functions — godot-docs master](https://github.com/godotengine/godot-docs/blob/master/tutorials/scripting/overridable_functions.rst)

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。