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

Unity中添加脚本组件后仍出现NullReferenceException问题

问题:NullReferenceException 异常处理

抛出错误:
NullReferenceException: Object reference not set to an instance of an object.

异常触发于代码第26行:

scoreText.text = "x " + chocAmount.ToString();

我的代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using static System.Net.Mime.MediaTypeNames;

public class scoreScript : MonoBehaviour
{

    /* 要修改文本的Text对象(Unity中有两种不同的Text类型,所以需要明确指定) */
    UnityEngine.UI.Text scoreText;
    public static int chocAmount; // 已收集的巧克力数量


    // Start在第一帧更新前调用
    void Start()
    {
        // UnityEngine.UI.Text scoreText = (UnityEngine.UI.Text)gameObject.GetComponent<UnityEngine.UI.Text>();
        scoreText = GetComponent<UnityEngine.UI.Text>();

    }

    // Update每帧调用一次
    void Update()
    {
        scoreText.text = "x " + chocAmount.ToString();
    }
}

我已将该脚本挂载到UI Text对象上,该对象的组件情况如下:
UI游戏对象的组件


解决方案

核心问题

从截图可见,你的UI对象挂载的是TextMeshPro - Text组件,但代码里试图获取Unity原生的UnityEngine.UI.Text组件,两者类型不匹配,导致scoreText赋值为null,后续访问其text属性时触发空引用异常。

修复步骤

  1. 添加TextMeshPro命名空间引用,在代码顶部加入:
    using TMPro;
    
  2. 修改成员变量的类型:
    TMPro.TMP_Text scoreText;
    
  3. 更新Start方法中的组件获取逻辑:
    scoreText = GetComponent<TMPro.TMP_Text>();
    

替代方案

若想继续使用Unity原生Text组件,可删除当前对象上的TextMeshPro - Text组件,添加UI > Text组件后重新挂载脚本。

额外防护

为避免后续出现类似空引用问题,建议在Update中增加判空逻辑:

void Update()
{
    if(scoreText != null)
    {
        scoreText.text = "x " + chocAmount.ToString();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:05:24