Rés*_*ésu 2 autoload gdscript godot
我问我如何添加一个脚本以在 godot 中自动加载,并且仅在一个文件中包含几行代码 -> 来运行函数并将变量从该文件获取到 2. 文件。
如果您转到“项目”菜单 ->“项目设置\xe2\x80\xa6”->“自动加载”选项卡,在顶部您将看到一个显示“路径”的字段,以及一个带有文件夹图标的按钮。您可以在此处选择要添加为自动加载的文件。它可以是一个场景,也可以是一个脚本。选择文件后,为其命名(Godot 会根据文件名生成一个名称,您可以更改它),然后单击“添加”。
\n当您选择的文件是脚本时,Godot 将为Node它创建一个脚本扩展的类型。
您将能够Node使用为自动加载指定的名称从任何场景的任何脚本访问。
因此,如果您向 autolaod 添加脚本,例如:
\nextends Node\n\nvar name:String\nRun Code Online (Sandbox Code Playgroud)\n使用名称(例如“数据”),您应该能够从Node任何场景中附加的任何脚本访问它。例如,像这样:
print(Data.name)\nRun Code Online (Sandbox Code Playgroud)\n如果您正在编写插件,您可能希望从代码添加自动加载。为此,您可以使用add_autoload_singleton该类的方法EditorPlugin(如果您正在编写插件,则您有其中之一),如下所示:
add_autoload_singleton(name, path)\nRun Code Online (Sandbox Code Playgroud)\n要删除它,您可以使用以下remove_autoload_singleton方法:
remove_autoload_singleton(name)\nRun Code Online (Sandbox Code Playgroud)\n这些相当于在编辑器 UI 中添加和删除自动加载。我提醒您,编辑器插件在编辑器中运行。
\n顺便说一下,自动加载被Node配置为添加到场景树中,但不在当前场景下。我们也可以直接在运行时执行此操作,但是我们缺乏在任何地方都可用的名称的便利性。我们将这样做:
get_tree().root.add_child(node)\nRun Code Online (Sandbox Code Playgroud)\n如果您尝试添加场景,可以执行以下操作:
\nvar packed_scene:PackedScene = load(path) # or preload\nget_tree().root.add_child(packed_scene.instance())\nRun Code Online (Sandbox Code Playgroud)\n如果您尝试添加脚本,可以这样做:
\nvar script:Script = load(path) # or preload\nget_tree().root.add_child(script.new())\nRun Code Online (Sandbox Code Playgroud)\n由于我们将这些添加Node到get_tree().root而不是添加到get_tree().current_sceneGodot 更改时,current_scene它们不会受到影响。
因此,我们之所以需要Node在场景树中附加一个脚本来访问自动加载,是因为它们自动加载是Node在场景树中,因此我们需要访问场景树来访问自动加载。
我们有两种自动加载的替代方案。它们并不完全相同,但在功能上有一些重叠。为了避免再回答这个问题,我只提一下它们:
\n