我正在加载并实例化一个包含 UI 对象(文本、按钮)的 Unity 预制件,并希望通过脚本为每个找到的按钮分配onClick
处理程序......
GameObject uiObj = ResourceUtil.InstantiatePrefab("Prefabs/UI/Main Menu UI", "UI");
uiObj.transform.SetParent(gameObject.transform, false);
Button[] buttons = uiObj.GetComponentsInChildren<Button>();
foreach (Button button in buttons)
{
button.onClick.AddListener(() => OnUIButtonClick(button.name));
}
public void OnUIButtonClick(string buttonID)
{
Log.Debug("OnUIButtonClick: " + buttonID);
}
但是,当单击任何按钮时,只会注销最后一个按钮的 ID。似乎每个按钮都会收到相同的 onClick 处理程序分配(这是迭代中的最后一个)。如何使其工作,以便将 onClick 处理程序唯一分配给每个按钮?
我也有类似的问题。我仍然不完全明白为什么它开始工作,可能是较低级别的一些解决问题或其他问题,但解决方案是这样的:
foreach (Button button in buttons)
{
string _name = button.name;
button.onClick.AddListener(() => OnUIButtonClick(_name));
}