在我的应用程序中,我有一个GameObject的列表,我通过代码为列表中的每个GameObject创建一个按钮。问题是,当我通过代码添加和onClick事件时,在按钮onClick列表中没有任何显示,当我点击按钮时没有任何事情发生,而且在这个过程中我没有得到任何错误。下面是我的代码是这样的。
public GameObject prefab;
public void Generate()
{
for (int i = 0; i < myList.Count; i++)
{
GameObject _t = Instantiate(prefab, myUIPanel.transform) as GameObject;
//Positioning, naming, ...
_t.GetComponent<Button>().onClick.AddListener(delegate { MyFunction(i); });
}
}
public void MyFunction(int index)
{
//...
}
我在一个编辑器脚本里创建了一个GUILayout.Button来调用 "生成 "方法。按钮被创建,我没有得到任何错误,但没有在按钮中添加任何Event。
编辑:因为你的ui元素是从预制件中实例化出来的,按钮没有连接到EventSystem。
解决办法:使用scriptableobject代替monobeviour,scriptableobjects独立于scenegameobject实例工作。
教程。https:/docs.unity3d.comManualclass-ScriptableObject.html。
https:/www.raywenderlich.com2826197-scriptableobject-tutorial-getting-started