检测在 canvas 内按下了哪个 UI 按钮?

Detecting which UI button was pressed within canvas?

我的 UI 上有大约 10 个按钮,我必须检查触摸了哪一个。我正在使用以下逻辑并且工作正常,但现在由于某种原因我收到此错误:

 NullReferenceException: Object reference not set to an instance of an object
 DetectButton.Start () (at Assets/Scripts/DetectButton.cs:14)

知道会发生什么吗?这是我的代码(附在 canvas 上),我使用的是 Unity 版本 5.1.0f3。如果您需要任何其他信息,我很乐意提供,提前致谢

void Start()
 {
     this.GetComponent<Button>().onClick.AddListener(() => 

                                                     { 

         if (this.name == "btnJogadores2")
         {
             print ("2 jogadores");
             jogadores = 2;
         }
         //QuantidadeJogadores(this.name);
         //QuantidadePartidas(this.name);
     }); 
 }

代码未经测试,但它应该可以让您开始获取所有按钮。

void Start() {
        var buttons = this.GetComponents<Button> ();
        foreach(var button in buttons) {
            button.onClick.AddListener(() = > {
                if (this.name == "btnJogadores2") {
                    print("2 jogadores");
                    jogadores = 2;
                }
                //QuantidadeJogadores(this.name);
                //QuantidadePartidas(this.name);
            });
        }
    }

实际上很难区分按钮。 更实际的方法是制作 10 个游戏对象(Canvas 的子对象)并将您的脚本附加到每个对象。

你不必像现在这样去做。

一个更简单的好做法是为 canvas 中的每个按钮创建 10 个单独的游戏对象。然后为其中的所有按钮创建一个包含 10 个独立函数的脚本。将该脚本附加到您 canvas。然后在按钮 GameObject select 上添加所需功能的脚本。下面的示例

void Start() { }
void Update() { }

public void button1()
{
    Debug.Log("Button3");
}

public void button2()
{
    Debug.Log("Button1");
}

public void button3()
{
    Debug.Log("Button3");
}

注意:button1、button2 和 button3 是 3 个独立按钮的功能

然后在你的 unity Inspector 里面:

  1. Select 带有按钮功能的脚本。
  2. 将您想要的方法分配给您的按钮。

在此之后运行您的场景和按钮将正确调用分配的方法。