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对象挂载的是TextMeshPro - Text组件,但代码里试图获取Unity原生的UnityEngine.UI.Text组件,两者类型不匹配,导致scoreText赋值为null,后续访问其text属性时触发空引用异常。
修复步骤
- 添加TextMeshPro命名空间引用,在代码顶部加入:
using TMPro; - 修改成员变量的类型:
TMPro.TMP_Text scoreText; - 更新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
相关产品推荐
相关产品推荐

