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
相关产品推荐
相关产品推荐

