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

Godot报错:Invalid call. Nonexistent function 'set' in base 'Nil' 求助

解决Godot反应堆计数器的空引用错误

问题梳理

你在制作反应堆核心数值计数器时遇到两类错误:

  • 最初把panel_frame和panel作为check_signal()的局部变量时,出现节点未在场景树中无法获取路径、**找不到节点"frame/Panel"**的错误——这是因为函数执行时节点还没完成场景树加载,get_node()无法定位目标节点。
  • 改成onready全局变量后,在检查器中修改value_from_model时出现**"Invalid call. Nonexistent function 'set' in base 'Nil'."**错误——这是因为检查器修改变量时,节点还未完成初始化,onready变量尚未赋值,此时调用panel_frame.set()或panel.set()会触发空引用错误。

解决方案

核心思路是在所有操作节点的代码前增加空引用检查,确保只有节点初始化完成后才执行相关逻辑。以下是修改后的完整代码:

extends MarginContainer

export var obj = ""
export var expr_list = {"sig": ""}
export(int) var value_from_model setget set_val
onready var panel_frame = get_node("frame")
onready var panel = get_node("frame/Panel")

func set_val(val):
    value_from_model = val
    # 修改进度条宽度前先检查节点是否存在
    if panel_frame != null:
        panel_frame.margin_right = value_from_model
    # 调用样式检查前先确保节点已初始化
    if panel_frame != null and panel != null:
        check_signal()

func check_signal():
    var new_style = StyleBoxFlat.new()
    var for_panel = StyleBoxFlat.new()
    
    new_style.border_width_top = 2
    new_style.border_width_bottom = 2
    new_style.border_width_left = 2
    new_style.border_width_right = 2
    new_style.border_color = Color("#1bf408")
    new_style.bg_color = Color("#0b0e0e")
    panel_frame.add_stylebox_override("panel", new_style)
    
    for_panel.bg_color = Color("#1bf408")
    panel.add_stylebox_override("panel", for_panel)

func _ready():
    check_signal()
    set_val(value_from_model)

关键改动说明

  1. 空引用检查:在set_val()中调用check_signal()前,先判断panel_frame和panel是否不为空,避免节点未初始化时执行样式修改逻辑。
  2. 样式设置优化:用add_stylebox_override()代替set(),这是Godot推荐的样式覆盖方式,比直接调用set()更稳定,也更符合API设计规范。
  3. 颜色值规范:将字符串颜色值转为Color类型,避免潜在的类型转换问题。

补充说明

检查器中修改变量时,Godot会直接触发set_val()回调,此时节点可能还没进入场景树,所以必须加空检查;onready变量会在节点进入场景树后、_ready()执行前赋值,因此_ready()中调用相关逻辑是安全的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:07:55