using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class StartupScript : MonoBehaviour
{
public TextMeshProUGUI startupText;
public bool gameHasStarted = false;
void Update()
{
if(Input.GetKey(KeyCode.Space))
{
gameHasStarted = true;
}
if(gameHasStarted)
{
startupText.enabled = false;
}
}
}我把这个脚本放在脚本文件夹中,作为画布的一个组件。当我在脚本文件夹中打开这个脚本的检查器时,它没有gameHasStated的公共bool复选框,也不允许我将TMPro实例设置为startupText。当我为画布中相同的脚本打开检查器时,这两个问题都不会发生。
当我运行游戏,按空格键时,它会返回错误。
NullReferenceException:对象引用未设置为对象StartupScript.Update ()的实例(位于资产/脚本/StartupScript.cs:21)
我该怎么解决这个问题?
发布于 2022-09-09 06:55:57
在我检查了您在Unity中的代码之后,我提出以下几点:
代码运行良好,既不编译也不运行。
我怀疑您试图从层次结构中拖放TMPro实例,这是不可能的。
其解释是设置默认引用,换句话说,当您选择文件夹中的脚本时,您正在编辑数据项目和文件。层次结构是场景数据,而不是文件数据,这就是不可能的原因。当预置文件是一个文件时,因此您可以分配它。
我不知道为什么您的程序抛出NullReferenceException,因为在我的测试中没有产生这样的错误。对您指定的有效引用进行双重检查。
发布于 2022-09-09 08:13:30
当我在scripts文件夹中打开这个脚本的检查器时,它没有gameHasStated的公共bool复选框,它不允许我将TMPro实例设置为startupText。
这是完全正常的!将您的脚本更多地看作是您将放置在场景中的组件的“蓝图”。蓝图的每个实例都是自己的对象,具有自己的gameHasStarted和startupText。
当我为画布中相同的脚本打开检查器时,
都不会出现这些问题。
这正是你想要的。将对象引用分配给画布上的实例。
现在,关于错误。此错误指示您的StartupScript实例没有分配startupText。您可以通过填写该字段来修复该字段:

如果它说“无”,很有可能您忘记分配它,您的脚本将崩溃一个错误(就像它做的那样)。
也是,请注意,理论上,您可以有多个将您抛出的StartupScript实例--一个可以被分配,另一个可以抛出错误。如果您怀疑这一点,请单击控制台中的错误,它应该突出显示具有抛出错误的脚本的特定对象。
https://stackoverflow.com/questions/73656130
复制相似问题