我查看了位于此处的处理相同问题的帖子,但它既没有说明问题所在,也没有解决我的问题。
我在面板中创建了一个带有多个按钮的 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()被调用并“点击!” 正确输出到控制台。
但是,单击时没有任何按钮触发事件。我还注意到检查器中 OnClick 中的 PersistentCalls.Calls 数组在运行时对于所有按钮都有 0 个元素。
我在 Windows 10 64 中使用 Unity 2017.4.3f1。
相关分类