Unity乒乓球游戏计分代码报NullReferenceException错误是什么原因?
报错原因及解决方法
你遇到的NullReferenceException空引用报错,在你当前的代码里只有两个触发可能,对应解决方法如下:
- ball对象为空:你在
Start方法中通过GameObject.Find("Ball")查找场景内的小球,要求场景里的小球对象名称必须和引号内的内容完全一致(大小写、前后空格都不能有偏差),如果名称不匹配、对象未加载/已被销毁,都会返回空值,后续Update中调用ball.transform就会触发报错。
解决方法:要么核对小球对象的名称和查找字符串完全一致,要么直接把层级面板里的小球对象拖到该脚本挂载物体的Inspector面板对应的ball变量栏中手动赋值,手动赋值的稳定性远高于运行时查找。 - ScoreBoard变量为空:
ScoreBoard是public类型的Text变量,如果你没有在Inspector面板中把对应显示分数的UI Text组件拖到对应变量栏赋值,该变量默认就是空值,执行到ScoreBoard.text = ...时就会触发报错。
解决方法:打开脚本挂载物体的Inspector面板,找到ScoreBoard变量对应的输入槽,把用来显示分数的Text组件拖进去完成赋值即可。
你也可以在Update方法最开头添加空校验代码做防护,避免出现报错直接中断运行:
void Update() { // 空校验,任意变量为空就直接跳出当前帧的执行 if (ball == null || ScoreBoard == null) { return; } // 后面保留你原来的逻辑 if (ball.transform.position.x >= 35f) { Bat_1_Score++; } if (ball.transform.position.x <= -35f) { Bat_2_Score++; } ScoreBoard.text = Bat_1_Score.ToString() + " - " + Bat_2_Score.ToString(); print(Bat_1_Score + " , " + Bat_2_Score); }
内容的提问来源于stack exchange,提问作者Linedol trainer channel gammin
相关产品推荐
相关产品推荐

