我查看了此处处理相同问题的帖子,但它既没有说明问题所在,也没有解决我的问题。
我在面板中创建了一个带有多个按钮的 Canvas 预制件。我在运行时实例化预制件并抓取Button
面板中的所有对象。然后我onClick()
为调用相同clicked()
方法的所有按钮的事件添加一个监听器
public class GameOptions
{
private GameObject canvas;
public GameOptions(GameObject canvas)
{
this.canvas = canvas;
GameObject.Instantiate(canvas);
Text[] textObjects = canvas.GetComponentsInChildren<Text>();
Button[] buttonObjects = canvas.GetComponentsInChildren<Button>();
for (int i = 0; i < buttonObjects.Length; i++)
{
Debug.Log(buttonObjects[i].name);
buttonObjects[i].onClick.AddListener(() => clicked());
buttonObjects[i].onClick.Invoke();
}
}
public void clicked()
{
Debug.Log("Clicked!");
}
}
请注意,当我通过代码调用事件时,clicked()
会调用并“单击!” 正确输出到控制台。
但是,单击时没有一个按钮会触发事件。我还注意到 Inspector 中 OnClick 中的 PersistentCalls.Calls 数组在运行时对所有按钮都有 0 个元素。
我在 Windows 10 64 中使用 Unity 2017.4.3f1。