如何从按钮提供信息?

时间:2016-09-04 10:29:55

标签: c# unity3d

我有四个按钮,如:

enter image description here

我还有一个将我的脚本附加到其上的游戏对象

在脚本下我有一个函数,当我在onClick()按钮中使用它时,它应该打印按钮的文本。

检查

enter image description here

如何在不同的按钮上调用一个功能并打印出用户点击的那些按钮的文本?

2 个答案:

答案 0 :(得分:1)

不是将string传递给回调函数,而是传递Button实例本身更有意义。如果您这样做,将来如果需要,您将能够从Button访问更多数据。

public Button[] Btn;

void OnEnable()
{
    //Register Button Events
    for (int i = 0; i < Btn.Length; i++)
    {
        int btIndex = i;
        Btn[i].onClick.AddListener(() => buttonCallBack(Btn[btIndex]));
    }
}

private void buttonCallBack(Button buttonPressed)
{
    Debug.Log(buttonPressed.GetComponentInChildren<Text>().text);

    if (buttonPressed == Btn[0])
    {
        //Your code for button 1
    }

    if (buttonPressed == Btn[1])
    {
        //Your code for button 2
    }

    if (buttonPressed == Btn[2])
    {
        //Your code for button 3
    }

    if (buttonPressed == Btn[3])
    {
        //Your code for button 4
    }
}

void OnDisable()
{
    //Un-Register Button Events
    for (int i = 0; i < Btn.Length; i++)
    {
        Btn[i].onClick.RemoveAllListeners();
    }
}

如果您仍想传递按钮文字

public Button[] Btn;

void OnEnable()
{
    //Register Button Events
    for (int i = 0; i < Btn.Length; i++)
    {
        int btIndex = i;
        string btText = Btn[btIndex].GetComponentInChildren<Text>().text;
        Btn[i].onClick.AddListener(() => buttonCallBack(btText));
    }
}

private void buttonCallBack(string buttonText)
{
    Debug.Log(buttonText);
}

void OnDisable()
{
    //Un-Register Button Events
    for (int i = 0; i < Btn.Length; i++)
    {
        Btn[i].onClick.RemoveAllListeners();
    }
}

请务必将Buttons分配到编辑器中的Btn变量插槽,否则您将收到null异常错误。

答案 1 :(得分:1)

取而代之的是列表中的所有按钮。制作一个脚本Button.cs并将其提供给每个UI按钮

在该脚本中创建一个公共方法

public void OnButtonClickListener(int index) {
    // Do your code here for button click using its index
}

现在你只需要将每个UI按钮的回调分配给这个公共方法,并传递按钮索引的参数。

我希望这会对你有帮助......