[英]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.