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

Godot 4报错:无法为Nil类型设置'text'索引(值类型为int)求助

Godot中设置Label文本触发"Null Instance"错误的解决方法

核心问题是**@export变量的setter函数执行时,@onready声明的MyLabel还未完成初始化**,导致尝试访问null对象的属性触发报错。

原因分析

@onready变量要等到节点进入场景树(_ready信号触发)时才会完成初始化,但@export的setter可能在节点加载阶段(比如编辑器中为MY_ITEM赋值、场景初始化早期)就被调用,此时$RichTextLabel还未被找到,MyLabel处于null状态。

另外需要注意:Label的text/bbcode_text属性仅接受字符串类型,必须将数值转换为字符串后再赋值。

解决方案

方案一:空值检查+初始化时补更

修改TextureButton的代码,将节点初始化逻辑移到_ready中,同时在setter里做空值判断,避免访问null对象:

@tool
extends TextureButton

var MyLabel: RichTextLabel

@export var MY_ITEM: Resource:
    set(newItem):
        MY_ITEM = newItem
        self.texture_normal = newItem.getTexture()
        print(newItem.getQuantity())
        # 先判断标签是否已初始化再更新
        if MyLabel:
            update_label_text()

func _ready():
    MyLabel = $RichTextLabel
    # 若MY_ITEM已提前赋值,初始化时补更文本
    if MY_ITEM:
        update_label_text()

func addQuantity(addedQuant: int):
    MY_ITEM.addQuantity(addedQuant)
    update_label_text()

# 抽离文本更新逻辑,方便复用
func update_label_text():
    MyLabel.bbcode_text = str(MY_ITEM.getQuantity())

方案二:等待节点就绪后再执行

如果想保留@onready声明,可在setter中用await ready等待节点初始化完成:

@tool
extends TextureButton

@onready var MyLabel = $RichTextLabel

@export var MY_ITEM: Resource:
    set(newItem):
        MY_ITEM = newItem
        self.texture_normal = newItem.getTexture()
        print(newItem.getQuantity())
        # 等待节点就绪后再更新文本
        await ready
        MyLabel.bbcode_text = str(MY_ITEM.getQuantity())

func addQuantity(addedQuant: int):
    MY_ITEM.addQuantity(addedQuant)
    MyLabel.bbcode_text = str(MY_ITEM.getQuantity())

额外检查项

  • 确认场景结构:TextureButton节点下必须存在名为RichTextLabel的子节点,节点名区分大小写,路径$RichTextLabel必须正确。
  • 转换字符串时使用Godot内置的str()函数,确保数值转字符串的方式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:45:01