【问题标题】:Unity c# - Error in a script that should change textUnity c# - 应该更改文本的脚本中的错误
【发布时间】:2016-04-13 00:42:00
【问题描述】:

我正在尝试制作一个级别选择菜单。这是我的布局的屏幕截图: 要实现这一目标,这是我实现它的脚本:

    using UnityEngine;
using UnityEngine.UI;

public class ChooseLevel : MonoBehaviour
{

    string[] levelNames;
    int i = 0;


    public Button addIndex;
    public Button subtractIndex;
    public Text levelChooser;

    string lvlName = "";

    void Start()
    {
        levelNames = PlayMenu.levelNames;

        addIndex.onClick.AddListener(delegate () { i += 1; });
        subtractIndex.onClick.AddListener(delegate () { i -= 1; });

    }

    void Update()
    {
        i = Mathf.Clamp(i, 0, levelNames.Length);
        lvlName = levelNames[i];
        levelChooser.text = lvlName;
    }

}

代码附在画布上,这里是场景的屏幕截图和画布检查器的一部分:

我得到的错误是:

NullReferenceException: Object reference not set to an instance of an object
ChooseLevel.Update () (at Assets/ChooseLevel.cs:28)

【问题讨论】:

  • 你创建过ChooseLevel 对象吗?
  • 你永远不应该出于任何原因使用“SerializeField”。只需将该字段标记为“public”。就这么简单。如果你绝对确定你想要这种行为
  • 这段代码“Mathf.Clamp(i, 0, levelNames.Length);”是没有意义的。您可能的意思是“i = Mathf.Clamp(i, 0, levelNames.Length);”
  • 请注意,模式通常是 "i = i % length" 以使其换行(但是,请注意负数)
  • 请注意您有string lvlName。你永远不会用字符串做到这一点。默认情况下将其初始化为空白字符串。 string lvlName = ""

标签: c# unity3d


【解决方案1】:

您在void Start() 上方声明您的字符串,但不要初始化它。 (隐式null

string lvlName;

那么当你第一次进入Update()时,lvlName的值为null

void Update()
{
    levelChooser.text = lvlName; //null the first time 
    lvlName = levelNames[i]; //THEN it's changed
    Mathf.Clamp(i, 0, levelNames.Length);
}

因此,根据您的游戏逻辑,您必须首先分配给lvlName 或使用空字符串对其进行初始化。我猜

void Update()
{
    i = Mathf.Clamp(i, 0, levelNames.Length); //FIRST clamp. Thanks to Joe Blow for pointing out that it never gets reassigned.
    lvlName = levelNames[i]; //then update lvlName
    levelChooser.text = lvlName; //then Change the text. 
}

应该可以正常工作。还要确保i 没有达到levelNames.Length 的确切值,但我认为逻辑没问题。当您遇到越界异常时,您会注意到。

【讨论】:

    【解决方案2】:

    这只是另一个脚本中的一个小错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      相关资源
      最近更新 更多