【发布时间】:2017-08-09 01:28:45
【问题描述】:
(已在编辑中回答,谢谢大家!)
我在 Unity 中的 MenuScript 基本上应该只是在公共函数调用上创建菜单项。但是,在编辑器中按下 Start 时,整个程序停止工作(没有错误消息,但什么都不会发生)。
我已将其缩小到现有的虚拟按钮列表(它们将根据 newMenu 功能而改变)。在 start 函数中访问 menu_items 变量时,一切都很好。但是,在它之外,Unity 将继续崩溃。
public class MenuScript : MonoBehaviour {
public List<Button> menu_items;
public bool paused;
private bool gameStarted;
// Use this for initialization
void Start()
{
// initializing (previously forgotten, added upon comments!
menu_items = new List<Button>();
foreach (Button btn in GetComponentsInChildren<Button>()) {
menu_items.Add(btn);
}
print("start function test: " + menu_items[0].name); // works.
}
// Update is called once per frame
void Update () {
}
public bool newMenu(string item0, string item1, string item2, string item3)
{
int tmp = 0;
print("new Menu function test: " +menu_items[0].name); // CRASH
//if (createNewMenuItem(0, item0)) tmp++;
//if (createNewMenuItem(1, item1)) tmp++;
//if (createNewMenuItem(2, item2)) tmp++;
//if (createNewMenuItem(3, item3)) tmp++;
if (tmp == 4) return true;
else return false;
}
public void newMenu(int pos, string item)
{
print("newMenu function");
createNewMenuItem(pos, item);
}
private bool createNewMenuItem(int pos, string item)
{
print("Creating new menu item for position " + pos + ": " + item);
//Crashes unity:
//Text text = menu_items[pos].GetComponentInChildren<Text>();
//Text text = menu_items[pos].transform.GetChild(0).GetComponent<Text>();
/*
do button stuff here...
*/
return true;
}
// more unimportant stuff ...
}
现在,谁能告诉我我忽略了什么?我对这整个考验感到非常困惑。谢谢!
编辑:添加了 menu_items 的初始化。虽然没有解决问题。
Edit2:所以我通过重写很多来让它工作。问题 - 如我所见 - 是 Unity 而不是像往常一样将错误消息写入我愚蠢的拼写错误,它只是崩溃了。我相信 Unity 的错误系统出于某种原因有问题,尽管我无法真正证明这一点。非常感谢。
【问题讨论】:
-
你永远不会初始化
menu_items。你在哪里设置menu_items = new List<Button>()? -
@RenéVogt 我倾向于假设
menu_items是通过 Unity 的序列化系统填充的。上述行为听起来更像是无限循环或递归,而不是简单的 NRE,应该在不挂起 Unity 的情况下记录它。 -
@rutter 好的,看来我对统一性了解不够,所以我重新提出问题。
-
完全没有错误信息?嗯,这似乎很奇怪。您可以在上面附加一个调试器,然后尝试单步执行代码,看看会发生什么吗?如果这是一个逻辑/循环错误,它会很快变得明显。