【问题标题】:Detecting which UI button was pressed within canvas?检测在画布中按下了哪个 UI 按钮?
【发布时间】:2015-06-18 07:45:15
【问题描述】:

我的 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);
     }); 
 }

【问题讨论】:

    标签: button canvas unity3d unity3d-gui


    【解决方案1】:

    你不必像现在这样做。

    一个更简单且良好的做法是为画布内的每个按钮创建 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. 将所需的方法分配给您的按钮。

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

    【讨论】:

    • 谢谢老兄!它有帮助。
    【解决方案2】:

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

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

    【讨论】:

    • 您好,先生!我的画布上有 10 个按钮:\
    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多