繁体   English   中英

Unity C#-应该更改文本的脚本错误

[英]Unity c# - Error in a script that should change text

我正在尝试制作一个关卡选择菜单。 这是我的布局的屏幕截图: 在此处输入图片说明 为了使这项工作有效,这是我实现该目标的脚本:

    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)

您可以在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但我认为逻辑还可以。 当您遇到越界异常时,您会注意到。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM