【问题标题】:UI Button.onClick handling multiple buttons via scriptUI Button.onClick 通过脚本处理多个按钮
【发布时间】:2016-01-25 06:34:59
【问题描述】:

我正在加载和实例化一个 Unity 预制件,其中包含 UI 对象(文本、按钮),并希望通过脚本为每个找到的按钮分配 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 处理程序唯一分配给每个按钮?

【问题讨论】:

    标签: c# user-interface unity3d event-handling game-engine


    【解决方案1】:

    我遇到了类似的问题。我仍然不完全理解它为什么开始工作,可能是较低级别的一些解决问题,但解决方案类似于:

    foreach (Button button in buttons)
    {
        string _name = button.name;
        button.onClick.AddListener(() => OnUIButtonClick(_name)); 
    }
    

    【讨论】:

    • 有趣!这行得通,谢谢。同时我发现的另一种方法是使用EventSystem.current.currentSelectedGameObject.name,但我更喜欢直接从按钮获取 ID。
    • 非常正确,这是一个奇怪的误解或 Unity 中的某些东西——事实上,这里有很多关于它的问题。没有人真正解释清楚。
    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 2018-12-24
    • 2012-06-17
    • 2013-06-07
    • 2017-10-10
    • 2023-03-11
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多