0

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

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

任何想法可能会发生什么?这是我的代码(附加到画布上),我使用的是 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);
     }); 
 }
4

2 回答 2

4

你不必像你现在做的那样做这一切。

一个更简单且良好的做法是为画布内的每个按钮创建 10 个单独的游戏对象。然后为其中的所有按钮创建一个包含 10 个单独功能的脚本。将该脚本附加到您的画布上。然后在按钮 GameObject 上选择所需功能的脚本。下面的示例

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 个独立按钮的功能

然后在你的统一检查员内部: _查看此示例图片_

  1. 使用您的按钮功能选择您的脚本。
  2. 将您想要的方法分配给您的按钮。

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

于 2015-06-29T20:06:52.347 回答
1

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

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 个游戏对象(画布之子)并将您的脚本附加到每个人身上。

于 2015-06-18T08:38:19.550 回答