【问题标题】:AddEventlistner, getting object reference to the clicked buttonAddEventlistener,获取点击按钮的对象引用
【发布时间】:2016-04-13 23:12:01
【问题描述】:

我在 Unity 5.3 的 foreach 循环中为一些按钮添加事件监听器。

 foreach (Button btn in buttons)
 {
    btn.onClick.AddListener(() => levelBtnClicked());
 }

如何获得对被点击按钮的按钮引用?所以我可以在levelBtnClicked函数中查看按钮的属性。

【问题讨论】:

    标签: c# unity3d event-handling unity5.3


    【解决方案1】:

    使levelBtnClicked 函数将Button 作为参数,然后在每个Button 实例中传递 在循环期间作为参数。

    Button[] buttons;
    
    void Start()
    {
        foreach (Button btn in buttons)
        {
            btn.onClick.AddListener(() => levelBtnClicked(btn));
        }
    }
    
    void levelBtnClicked(Button buttonClicked)
    {
    buttonClicked.image = ......
    buttonClicked.name....
    Debug.Log("Button Clicked: "+buttonClicked.name);
    }
    

    【讨论】:

    • 这是我尝试的第一件事,但没有奏效。但我想通了。简单地将 foreach 循环更改为 for 循环。不过谢谢:)
    • 没问题。没试过这个,但你确定没有用?
    • 是的,试过了。不太确定为什么它不起作用...但是当我改为使用 for 循环时,它以某种方式起作用:p
    • @JørgenAndersen 好的。真高兴你做到了。对您的代码进行一次更正。删除Button btn = buttons[i]; 是不必要的。将btn.onClick.AddListener(() => levelBtnClicked(btn)); 替换为btn.onClick.AddListener(() => levelBtnClicked(buttons[i]));
    • 还将buttons.Length-1 替换为buttons.Length
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多