You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot中使用get_node()引用节点报Node not found错误怎么办

报错核心原因

你踩了三个GDScript开发的基础认知误区:

  • get_node() 的作用是查找运行时场景树内的节点,它不识别文件系统里的脚本、文件夹路径,你传入带.gd后缀的路径本质是把文件路径和节点路径搞混了。
  • 你对get_node()的相对路径规则理解错误:不带特殊前缀的相对路径,查找起点是当前脚本挂载的节点本身,不是当前节点的父节点。
  • 你提到的PlayerStateMachine是项目文件系统里和Player.gd同级的文件夹,这类文件系统里的资源如果没有被实例化为节点、添加到场景树中,get_node()永远不可能找到。
正确实现方案

根据你的使用场景选对应写法即可:

方案1:已在场景编辑器中提前挂载状态机节点

如果你已经把挂了PlayerStateMachineManager.gd脚本的节点添加到Player节点的子级:

  • 先在场景编辑器的节点树面板,把这个状态机节点的名字改成不带后缀的合法节点名(比如命名为PlayerStateMachineManager)
  • 代码里写节点路径时不要加.gd后缀,参考如下:
# 如果状态机节点是Player的直接子节点,用$符号简写更方便
onready var statemachine = $PlayerStateMachineManager
# 等价于 onready var statemachine = get_node("PlayerStateMachineManager")

方案2:通过代码动态创建状态机实例

如果你不想提前在场景里预置节点,想靠代码动态加载创建,不要用get_node(),改用资源加载的方式:

# 先通过文件系统路径预加载状态机脚本,路径以res://开头,填写你项目里的实际存储位置
const PlayerStateMachineManager = preload("res://PlayerStateMachine/PlayerStateMachineManager.gd")
onready var statemachine

func _ready():
    # 实例化状态机对象
    statemachine = PlayerStateMachineManager.new()
    # 把实例化后的节点添加到当前节点下,加入场景树才能正常调用节点生命周期方法
    add_child(statemachine)

补充提示:场景树和文件系统是两套完全独立的逻辑,不要把文件系统里的文件夹、文件层级等同于场景树的节点层级。你在项目目录里新建文件夹、存放脚本,不会自动同步生成场景树里的对应节点。

内容的提问来源于stack exchange,提问作者C Hale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:39:29