Обнаружение, какая кнопка пользовательского интерфейса была нажата в пределах холста?

У меня около 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);
     }); 
 }

2 ответа

Решение

Вам не нужно все это так, как вы делаете.

Более простой и полезной практикой было бы создание 10 отдельных объектов GameObject для каждой кнопки внутри холста. а затем создайте единый скрипт с 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. Назначьте вам нужный метод для кнопки.

После этого запустите вашу сцену, и ваша кнопка будет правильно вызывать назначенные методы.

Код не проверен, но он должен помочь вам начать работу со всеми кнопками.

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 GameObjects (Child of the Canvas) и прикрепить свой скрипт к каждому из них.

Другие вопросы по тегам