Button 检测画布中按下的UI按钮?

Button 检测画布中按下的UI按钮?,button,canvas,unity3d,unity3d-gui,Button,Canvas,Unity3d,Unity3d Gui,我的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。如果您需要任何

我的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);
     }); 
 }
void Start()
{
this.GetComponent().onClick.AddListener(()=>
{ 
如果(this.name==“btnJogadores2”)
{
印刷品(“2件Jogadors”);
慢跑爱好者=2;
}
//QuantidadeJogadores(此名称);
//QuantidadePartidas(此名称);
}); 
}

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

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);
            });
        }
    }
void Start(){
var buttons=this.GetComponents();
foreach(按钮中的var按钮){
button.onClick.AddListener(()=>{
如果(this.name==“btnJogadores2”){
印刷品(“2件Jogadors”);
慢跑爱好者=2;
}
//QuantidadeJogadores(此名称);
//QuantidadePartidas(此名称);
});
}
}
实际上,很难区分按钮。
更实用的方法是制作10个游戏对象(画布的子对象),并将脚本附加到每个对象上。

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

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);
            });
        }
    }
void Start(){
var buttons=this.GetComponents();
foreach(按钮中的var按钮){
button.onClick.AddListener(()=>{
如果(this.name==“btnJogadores2”){
印刷品(“2件Jogadors”);
慢跑爱好者=2;
}
//QuantidadeJogadores(此名称);
//QuantidadePartidas(此名称);
});
}
}
实际上,很难区分按钮。
更实用的方法是制作10个游戏对象(画布的子对象)并将脚本附加到每个对象上。

您不必像现在这样做

一个简单而好的做法是为画布中的每个按钮创建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");
}
注意:按钮1、按钮2和按钮3是3个单独按钮的功能

然后在你的统一检查员里面:

  • 使用按钮功能选择脚本
  • 将所需方法分配给按钮

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

    您不必按现在的方式执行所有这些操作

    一个简单而好的做法是为画布中的每个按钮创建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");
    }
    
    注意:按钮1、按钮2和按钮3是3个单独按钮的功能

    然后在你的统一检查员里面:

  • 使用按钮功能选择脚本
  • 将所需方法分配给按钮

  • 运行场景后,您的按钮将正确调用指定的方法。

    您好,先生!我的画布上有10个按钮:\hello sir!我的画布上有10个按钮:\Thank dude!这很有帮助,谢谢你,伙计!这很有帮助。