Godot技术求助:如何通过变量访问Autoload文件?
修正方案及代码调整
核心问题梳理
你之前的代码主要有两个关键错误:
- 数组
items存储的不是按钮节点的名称字符串,而是尝试引用当前脚本未定义的变量a、b; - 动态访问Autoload变量时的逻辑偏差,以及节点获取的细节问题。
完整修正代码
首先调整数组初始化,确保存储按钮名称字符串:
# 存储场景中按钮节点的名称 var items = ["a", "b"]
然后修改store函数,优化遍历逻辑并修正变量与节点的访问方式:
func store(item_names: Array): # 直接遍历数组中的每个节点名称 for item_name in item_names: # 动态获取Autoload文件中对应的变量值 var save_value = saveLoad.get(item_name) # 获取场景中的目标按钮节点 var target_button = get_node(item_name) # 根据变量值控制按钮可见性 if save_value == 0: target_button.visible = false
最后在_ready回调中调用函数:
func _ready(): store(items)
关键细节说明
- 数组内容修正:必须用
["a", "b"]存储按钮的名称字符串,而非无引号的[a, b]——后者会尝试读取当前脚本的a、b变量(未定义会直接报错),无法正确指向场景中的按钮节点。 - Autoload名称匹配:确保代码中的
saveLoad与你在项目设置中Autoload的名称完全一致(注意大小写,你补充代码里的Savenload属于拼写错误,需和文件名saveLoad.gd对应)。 - 动态变量访问:
saveLoad.get(item_name)通过字符串名称动态访问Autoload中的变量,完美解决了saveLoad.itemname被识别为固定变量名的问题。 - 节点获取优化:
get_node(item_name)是Godot中通过名称获取节点的标准方式,也可以用更简洁的$"%s" % item_name替代。
内容的提问来源于stack exchange,提问作者jaeo
相关产品推荐
相关产品推荐

