Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过按钮提供信息?_C#_Unity3d - Fatal编程技术网

C# 如何通过按钮提供信息?

C# 如何通过按钮提供信息?,c#,unity3d,C#,Unity3d,我有四个按钮,如: 我还有一个游戏对象,可以将我的脚本附加到它上 在脚本下,我有一个函数,当我在onClick()按钮中使用它时,它应该打印按钮的文本 检查员 如何在不同的按钮上调用一个函数并打印出用户单击的那些按钮的文本?与其将字符串传递给回调函数,不如将按钮实例本身传递给回调函数。如果您这样做,您将能够在将来需要时从按钮访问更多数据 public Button[] Btn; void OnEnable() { //Register Button Events for (

我有四个按钮,如:

我还有一个游戏对象,可以将我的脚本附加到它上

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

检查员


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

与其将
字符串
传递给回调函数,不如将
按钮
实例本身传递给回调函数。如果您这样做,您将能够在将来需要时从
按钮
访问更多数据

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();
    }
}
公共按钮[]Btn;
void OnEnable()
{
//注册按钮事件
对于(int i=0;ibuttonCallBack(Btn[btIndex]);
}
}
专用无效按钮回拨(按钮按下)
{
Log(buttonPressed.getComponentChildren().text);
如果(按钮按下==Btn[0])
{
//按钮1的代码
}
如果(按钮按下==Btn[1])
{
//按钮2的代码
}
如果(按钮按下==Btn[2])
{
//按钮3的代码
}
如果(按钮按下==Btn[3])
{
//按钮4的代码
}
}
无效可禁用()
{
//取消注册按钮事件
对于(int i=0;i
如果仍要仅传递按钮文本

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();
    }
}
公共按钮[]Btn;
void OnEnable()
{
//注册按钮事件
对于(int i=0;ibuttonCallBack(btText));
}
}
私有无效按钮回调(字符串按钮文本)
{
Debug.Log(buttonText);
}
无效可禁用()
{
//取消注册按钮事件
对于(int i=0;i

请记住将
按钮
分配给编辑器中的
Btn
变量槽,否则将出现
null
异常错误。

与其将
字符串
传递给回调函数,不如传递
按钮
实例本身。如果您这样做,您将能够在将来需要时从
按钮
访问更多数据

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();
    }
}
公共按钮[]Btn;
void OnEnable()
{
//注册按钮事件
对于(int i=0;ibuttonCallBack(Btn[btIndex]);
}
}
专用无效按钮回拨(按钮按下)
{
Log(buttonPressed.getComponentChildren().text);
如果(按钮按下==Btn[0])
{
//按钮1的代码
}
如果(按钮按下==Btn[1])
{
//按钮2的代码
}
如果(按钮按下==Btn[2])
{
//按钮3的代码
}
如果(按钮按下==Btn[3])
{
//按钮4的代码
}
}
无效可禁用()
{
//取消注册按钮事件
对于(int i=0;i
如果仍要仅传递按钮文本

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();
    }
}
公共按钮[]Btn;
void OnEnable()
{
//注册按钮事件
对于(int i=0;ibuttonCallBack(btText));
}
}
私有无效按钮回调(字符串按钮文本)
{
Debug.Log(buttonText);
}
无效可禁用()
{
//取消注册按钮事件
对于(int i=0;i

记住将
按钮
分配给编辑器中的
Btn
变量槽,否则会出现
null
异常错误。

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

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

public void OnButtonClickListener(int index) {
    // Do your code here for button click using its index
}
现在您只需将每个UI按钮的回调分配给这个公共方法,并传递按钮索引的参数


我希望这将帮助您……

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

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

public void OnButtonClickListener(int index) {
    // Do your code here for button click using its index
}
现在您只需将每个UI按钮的回调分配给这个公共方法,并传递按钮索引的参数


我希望这将帮助您…

谢谢,但我有大约300个按钮,我认为这不是一个好办法。如果您有300个按钮,只需要它们的
文本,请在我的回答中使用第二种解决方案。代码将始终相同,事件将自动注册和取消注册。顺便问一下,为什么你认为这不是一个好的方法呢?对不起,我没有看到第二个解决方案对我有效。非常感谢:)如果你的问题解决了,别忘了接受答案。快乐编码!是的,当然谢谢:)谢谢,但我有大约300个按钮,我认为这不是一个好办法。如果你有300个按钮,只需要它们的
文本,请使用我答案中的第二个解决方案。代码将始终相同,事件将自动注册和取消注册。顺便问一下,为什么你认为这不是一个好的方法呢?对不起,我没有看到第二个解决方案对我有效。非常感谢:)如果你的问题解决了,别忘了接受答案。快乐编码!是的,当然,谢谢:)