unity3d - Unity:UI.Button 从脚本添加 OnClick 事件失败
问题描述
在我的应用程序中,我有一个 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 来调用“生成”方法。按钮已创建,我没有收到任何错误,但按钮中没有添加任何事件。
解决方案
编辑:因为你的 ui 元素是从预制件中实例化的,所以按钮没有连接到 EventSystem
解决方法:使用 scriptableobject 而不是 monobeviour,scriptableobjects 独立于场景/游戏对象实例工作
教程: https ://docs.unity3d.com/Manual/class-ScriptableObject.html
https://www.raywenderlich.com/2826197-scriptableobject-tutorial-getting-started
推荐阅读
- spring - 弹簧 JDBC 模板。空指针异常
- jquery - pdfmake中未显示页脚
- ruby-on-rails - Rails 5 + Shrine + 多态模型 + 漂亮的位置
- javascript - 如何用 JS 编码
- python-2.7 - 将子进程的输出写入文本文件
- javascript - 从 webview 导航到 react native 页面
- python - Python:+=静态方法中的奇怪行为
- flutter - Flutter:有没有办法用英文打开键盘?
- qt - 如何在 qt 快速应用程序中在 PieSlice 和 BarSet 的中心显示文本?
- android - Expo Camera recordAsync 承诺未解决