【发布时间】: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 = ""