Обнаружение, какая кнопка пользовательского интерфейса была нажата в пределах холста?
У меня около 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 отдельных кнопок
Тогда внутри вашего единства инспектор:
- Выберите свой скрипт с помощью кнопок функций.
- Назначьте вам нужный метод для кнопки.
После этого запустите вашу сцену, и ваша кнопка будет правильно вызывать назначенные методы.
Код не проверен, но он должен помочь вам начать работу со всеми кнопками.
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) и прикрепить свой скрипт к каждому из них.