首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不可能将TMPro文本设置为TMPro对象引用

不可能将TMPro文本设置为TMPro对象引用
EN

Stack Overflow用户
提问于 2022-09-09 00:19:29
回答 2查看 21关注 0票数 -1
代码语言:javascript
复制
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)

我该怎么解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2022-09-09 06:55:57

在我检查了您在Unity中的代码之后,我提出以下几点:

代码运行良好,既不编译也不运行。

我怀疑您试图从层次结构中拖放TMPro实例,这是不可能的。

其解释是设置默认引用,换句话说,当您选择文件夹中的脚本时,您正在编辑数据项目和文件。层次结构是场景数据,而不是文件数据,这就是不可能的原因。当预置文件是一个文件时,因此您可以分配它。

我不知道为什么您的程序抛出NullReferenceException,因为在我的测试中没有产生这样的错误。对您指定的有效引用进行双重检查。

票数 0
EN

Stack Overflow用户

发布于 2022-09-09 08:13:30

当我在scripts文件夹中打开这个脚本的检查器时,它没有gameHasStated的公共bool复选框,它不允许我将TMPro实例设置为startupText。

这是完全正常的!将您的脚本更多地看作是您将放置在场景中的组件的“蓝图”。蓝图的每个实例都是自己的对象,具有自己的gameHasStartedstartupText

当我为画布中相同的脚本打开检查器时,

都不会出现这些问题。

这正是你想要的。将对象引用分配给画布上的实例。

现在,关于错误。此错误指示您的StartupScript实例没有分配startupText。您可以通过填写该字段来修复该字段:

如果它说“无”,很有可能您忘记分配它,您的脚本将崩溃一个错误(就像它做的那样)。

也是,请注意,理论上,您可以有多个将您抛出的StartupScript实例--一个可以被分配,另一个可以抛出错误。如果您怀疑这一点,请单击控制台中的错误,它应该突出显示具有抛出错误的脚本的特定对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73656130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档