UI Button.onClick 通过脚本处理多个按钮



我正在加载并实例化一个包含 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)); 
}

相关内容

  • 没有找到相关文章