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