gpt4 book ai didi

godot - 如何在Godot中引用节点

转载 作者:行者123 更新时间:2023-12-03 08:04:19 28 4
gpt4 key购买 nike

我正在使用 gdscipt,并且正在尝试设置状态机。我正在尝试访问PlayerStateMachine/PlayerStateMachineManager.gd

通过使用

onready var statemachine = get_node("PlayerStateMachine/PlayerStateMachineManager.gd")

但我不断收到错误

get_node: (Node not found: "PlayerStateMachine/PlayerStateMachineManager.gd" (absolute path attempted from "/root/Player").)

据我了解,get_node()应该从当前节点的父节点查找路径,那么为什么它找不到 PlayerStateMachineManager.gd

仅供引用:PlayerStateMachine是与 Player.gd 位于同一文件夹中的文件夹

Directory Picture

最佳答案

get_node方法将尝试从场景树中获取节点(或因错误而失败)。但是,显然您正在传递脚本文件的路径(例如扩展名为“.gd”)?文件位于文件系统树中,而不是场景树中。

需要明确的是:脚本不是 Node ,并且 Node 不是脚本(也不是脚本文件)。节点存在于场景树中,并且可能(也可能没有)附加了脚本。 脚本可以附加到Object 、多个对象,或者没有。是的,NodeObject

您可以使用 add_child节点添加到代码中的场景树中,场景树中路径的组成部分是 name Node 的。 您还可以修改场景文件的场景树(例如扩展名为“.tscn”),您可以在 Godot 编辑器中直观地执行此操作。

重申一下:添加节点并不意味着添加脚本文件。并且组织脚本文件的方式不必与场景树相匹配。此外,您可以拥有不附加到 Node 的脚本。

假设您需要一个节点(而不是脚本文件),您需要场景树中它的路径。 我无法告诉你哪条是路径,因为你没有分享你的场景树的样子。

在编辑器中,场景树看起来像这样:

Scene

并且 get_node 使用该树中的路径。

参见Nodes and scene instances


或者您确实想要加载脚本文件。毕竟,您共享的图像是文件系统树的图像(除了这张图片不是 Godot 编辑器的图像):

Files

您可以使用 load 加载这些脚本文件(或preloadResourceLoader.loadResourceLoader.load_interactive...)给你一个Script 。如果是GDScript脚本文件,则是GDScript这也是对象您可以使用 new 实例化该GDScript ...

从 GDScript 语言的角度来看,Script 是类。然而,在幕后发生的事情是,当您实例化一个 GDScript Godot 时,它将创建一个 Object 适当的类型(Node 或不是)并附加其GDScript请注意,Object 类具有 get_scriptset_script方法。

请注意,Godot 打包并虚拟了项目文件系统。因此,您可以使用以“res://”开头的路径来引用项目文件系统中的文件,这些文件是您编辑游戏时的实际文件,或者是您获得的“.pck”文件中的虚拟文件导出游戏。

参见File systemFile paths in Godot projects

关于godot - 如何在Godot中引用节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72906056/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com