Godot:如何添加脚本以仅在脚本中自动加载?

Rés*_*ésu 2 autoload gdscript godot

我问我如何添加一个脚本以在 godot 中自动加载,并且仅在一个文件中包含几行代码 -> 来运行函数并将变量从该文件获取到 2. 文件。

The*_*aot 5

添加仅从编辑器自动加载的脚本

\n

如果您转到“项目”菜单 ->“项目设置\xe2\x80\xa6”->“自动加载”选项卡,在顶部您将看到一个显示“路径”的字段,以及一个带有文件夹图标的按钮。您可以在此处选择要添加为自动加载的文件。它可以是一个场景,也可以是一个脚本。选择文件后,为其命名(Godot 会根据文件名生成一个名称,您可以更改它),然后单击“添加”。

\n

当您选择的文件是脚本时,Godot 将为Node它创建一个脚本扩展的类型。

\n

您将能够Node使用为自动加载指定的名称从任何场景的任何脚本访问。

\n
\n

因此,如果您向 autolaod 添加脚本,例如:

\n
extends Node\n\nvar name:String\n
Run Code Online (Sandbox Code Playgroud)\n

使用名称(例如“数据”),您应该能够从Node任何场景中附加的任何脚本访问它。例如,像这样:

\n
print(Data.name)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

从代码添加自动加载

\n

如果您正在编写插件,您可能希望从代码添加自动加载。为此,您可以使用add_autoload_singleton该类的方法EditorPlugin(如果您正在编写插件,则您有其中之一),如下所示:

\n
add_autoload_singleton(name, path)\n
Run Code Online (Sandbox Code Playgroud)\n

要删除它,您可以使用以下remove_autoload_singleton方法:

\n
remove_autoload_singleton(name)\n
Run Code Online (Sandbox Code Playgroud)\n

这些相当于在编辑器 UI 中添加和删除自动加载。我提醒您,编辑器插件在编辑器中运行。

\n
\n

顺便说一下,自动加载被Node配置为添加到场景树中,但不在当前场景下。我们也可以直接在运行时执行此操作,但是我们缺乏在任何地方都可用的名称的便利性。我们将这样做:

\n
get_tree().root.add_child(node)\n
Run Code Online (Sandbox Code Playgroud)\n

如果您尝试添加场景,可以执行以下操作:

\n
var packed_scene:PackedScene = load(path) # or preload\nget_tree().root.add_child(packed_scene.instance())\n
Run Code Online (Sandbox Code Playgroud)\n

如果您尝试添加脚本,可以这样做:

\n
var script:Script = load(path) # or preload\nget_tree().root.add_child(script.new())\n
Run Code Online (Sandbox Code Playgroud)\n

由于我们将这些添加Nodeget_tree().root而不是添加到get_tree().current_sceneGodot 更改时,current_scene它们不会受到影响。

\n

因此,我们之所以需要Node在场景树中附加一个脚本来访问自动加载,是因为它们自动加载是Node在场景树中,因此我们需要访问场景树来访问自动加载。

\n
\n

备择方案

\n

我们有两种自动加载的替代方案。它们并不完全相同,但在功能上有一些重叠。为了避免再回答这个问题,我只提一下它们:

\n
    \n
  • 具有静态方法的命名类
  • \n
  • 自定义资源(搜索基于资源的通信)。
  • \n
\n