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

UI Button.onClick handling multiple buttons via script

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