目标

本节我们创建通过Godot的自动加载来创建一个简单的全局的场景切换器。

参考

本例参考了官方文档中“编写脚本”下的“单例(自动加载)”一文中的示例。并且直接使用了其中的范例工程。因为官方的目的就是要我们用它们的示例来学习自动加载。
image.pngimage.png

创建脚本

我们创建用于作为的脚本,单例会被加载为根视口root的子节点,所以必须继承自节点类型。
image.png
代码如下:

  1. # 用于作为单例的脚本
  2. extends Node # 单例会被加载为根视口root的子节点,所以必须继承自节点类型
  3. # 切换场景 - 简单封装了SceneTree的change_scene()方法
  4. func change_scene(path):
  5. # 当然你可以在这里继续添加一些代码,来处理细节
  6. get_tree().change_scene(path)

打开项目设置-自动加载,将其设为自动加载节点。
image.png
运行场景后,就可以在“远程”视图下看到,根视口root下挂载了一个Global节点。而在“本地”视图中你是看不到根视口和加载的Global节点的。所以你可以当它是一个隐含节点。
image.pngimage.png
一旦你在项目设置中添加了一个自动加载节点,那么它就会自动在你打开的每一个场景中都加载为根视口root的子节点。甚至如果你如果知道在游戏循环中,Godot的根视口root是永久存在的,所以Global也是不变的,切换场景只不过是删除场景的节点树,然后加载另一个场景的节点树。
这样理解之后,就会发现,为什么自动加载会有全局特性了。

扩展思考

那么,自动加载还能有什么用呢?