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

GDscript中使用get_node()无法定位子Label节点问题求助

问题原因排查&解决办法

1. 最可能的直接原因:节点名不匹配

你报错日志里的父节点路径是/root/ShadowsSettings,但你描述里的父节点名称是Shadow Settings,存在两处明显差异:

  • 父节点名少了空格
  • Shadow多了后缀s
    Godot的get_node方法对节点名的匹配是严格大小写、全字符匹配,哪怕多一个空格、大小写不对都找不到节点。同时你也要确认子节点的名称是不是完全等于ON、OFF,有没有出现数字0和字母O混淆、多空格的情况。

2. 层级结构错误

请确认你的ON、OFF两个Label节点,是Shadow Settings节点的直接子节点,如果是放在了其他子节点下,用相对路径"ON"肯定找不到对应节点。
你可以在脚本中加一行测试代码确认子节点列表:

func _ready():
    print("当前节点的所有直接子节点:", get_children())

运行后查看控制台输出的子节点名称,就能直接核对是否有目标节点、名称是否正确。

3. 代码优化建议

你现在把get_node放在_process里每帧调用,既浪费性能,也容易出现节点未加载完成就调用的报错。建议提前缓存节点引用,同时简化逻辑,修改后代码参考:

Godot 4 版本

extends Label

var Shadows_On = true
# 提前缓存节点引用,节点名必须和场景内命名完全一致
@onready var on_label = $ON
@onready var off_label = $OFF

func _process(_delta):
    on_label.visible = Shadows_On
    off_label.visible = not Shadows_On

func _on_SettingsButton_button_up():
    if get_parent().get_parent().get_parent().visible:
        # 直接取反即可,不需要冗余的if判断
        Shadows_On = not Shadows_On

Godot 3 版本

只需要把@onready替换为onready即可:

extends Label

var Shadows_On = true
onready var on_label = $ON
onready var off_label = $OFF

func _process(_delta):
    on_label.visible = Shadows_On
    off_label.visible = not Shadows_On

func _on_SettingsButton_button_up():
    if get_parent().get_parent().get_parent().visible:
        Shadows_On = not Shadows_On

内容的提问来源于stack exchange,提问作者Rashad Dent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:30:05