【问题标题】:Not able to change text from another script无法从另一个脚本更改文本
【发布时间】:2022-07-27 23:13:20
【问题描述】:

它应该如何工作 - 当我点击 UI 按钮时,分数会增加并使用文本显示。

它是如何工作的 - 一个错误提示“NullReferenceException: Object reference not set to an instance of an object

两个不同的游戏对象上有两个脚本。

播放器脚本

using UnityEngine;

public class Player : MonoBehaviour
{
    ScoreManager scoreManager;
    private void Start()
    {
        scoreManager = new ScoreManager();
    }

    public void UpdateScore()
    {
        scoreManager.IncrementScore();
    }
}

ScoreManager 脚本

using UnityEngine;
using TMPro;

public class ScoreManager : MonoBehaviour
{
    private int score = 0;
    public TextMeshProUGUI scoreText;

    public void IncrementScore()
    {
        score++;
        scoreText.text = score.ToString();
    }
}

当我使用 Debug.Log(score.ToString()) 时,它会在控制台中显示分数。但是当我使用 textmeshprougui 时,它会报错。

另外,我已将文本拖到检查器中,因此对于空引用来说这不是问题。我已经检查过很多次了。

为什么我无法从另一个脚本更新文本?

【问题讨论】:

标签: unity3d game-development


【解决方案1】:

空引用异常在您的 Player.cs 脚本中,由您的 Start() 方法中的代码引起

ScoreManager scoreManager;

private void Start()
{
    scoreManager = new ScoreManager();
}

删除Start() 方法中的代码。因为有一个字段ScoreManager scoreManager;,所以您将具有脚本 ScoreManager.cs 的游戏对象拖到 Player.cs 脚本中的插槽中。现在您在 Player.cs 脚本中获得了 ScoreManager.cs 脚本的引用。

现在,您将在 Start() 方法中重置其引用。这导致了空引用异常。

【讨论】:

    猜你喜欢
    • 2016-09-29
    • 2017-07-12
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多