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

Unity中UI文本首次修改正常后续触发NullReferenceException问题求助

解决Unity中修改UI文本的NullReferenceException问题

我一眼就看出问题出在你的单例实现和组件引用上,咱们一步步来解决:

核心问题分析

你遇到的NullReferenceException主要有两个原因:

  • 错误的单例创建方式:Unity的MonoBehaviour脚本不能直接用new money()来实例化,这样生成的对象不是场景中挂载了该脚本的GameObject实例,它的MoneyText变量根本没机会被赋值(因为Inspector只对场景中的对象生效)。
  • 可能未在Inspector赋值MoneyText:即使单例正确了,如果没把UI Text组件拖到脚本的MoneyText字段上,也会导致空引用。

修复步骤与修正代码

1. 正确实现单例模式

把单例的初始化移到Awake方法里,确保引用的是场景中实际存在的脚本实例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MoneyManager : MonoBehaviour { // 建议类名用大驼峰命名,符合C#规范
    public static MoneyManager instance;
    private float currentMoney = 100f;
    public Text moneyText;

    void Awake() {
        // 单例初始化,确保场景中只有一个实例
        if (instance == null) {
            instance = this;
            DontDestroyOnLoad(gameObject); // 可选:如果需要跨场景保留货币数据
        } else {
            Destroy(gameObject);
        }
    }

    void Start() {
        UpdateMoneyText();
    }

    public void AddMoney(float amount) {
        currentMoney += amount;
        UpdateMoneyText();
    }

    public float GetCurrentMoney() {
        return currentMoney;
    }

    private void UpdateMoneyText() {
        // 加个空判断更安全,避免意外空引用
        if (moneyText != null) {
            moneyText.text = currentMoney.ToString("F2"); // 可选:保留两位小数更美观
        } else {
            Debug.LogError("MoneyText未在Inspector中赋值!");
        }
    }
}

2. 确保组件引用正确

  • 在场景中创建一个空GameObject(比如命名为GameManager),把修正后的MoneyManager脚本挂上去。
  • 在Inspector面板中,找到MoneyText字段,把你的UI Text组件拖进去赋值。

3. 修改调用代码

现在调用单例的方式就没问题了:

MoneyManager.instance.AddMoney(-turretBuildCost);

额外建议

  • 类名和变量名遵循C#命名规范(大驼峰类名,小驼峰变量名),这样代码可读性更高。
  • 在操作UI组件前加空判断,能更清晰地定位问题(比如打印错误日志)。
  • 如果需要跨场景保留货币数据,加上DontDestroyOnLoad(gameObject)可以避免场景切换时对象被销毁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:22:53