我查看了这里的帖子,它涉及相同的问题,但既没有说明问题出在哪里,也没有解决我的问题。
我创建了一个Canvas预制件,在面板内有许多按钮。我在运行时实例化预制件,并获取面板内所有
请注意,当我通过代码调用事件时,
但是,当单击任何按钮时,都没有触发事件。我还注意到,在运行时,OnClick中的PersistentCalls.Calls数组对于所有按钮都具有0个元素。
我正在使用Windows 10 64位下的Unity 2017.4.3f1。
我创建了一个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()
会被调用,并且"Clicked!"正确地输出到控制台。但是,当单击任何按钮时,都没有触发事件。我还注意到,在运行时,OnClick中的PersistentCalls.Calls数组对于所有按钮都具有0个元素。
我正在使用Windows 10 64位下的Unity 2017.4.3f1。