Должен ли я использовать один скрипт на нескольких кнопках в единстве или создать скрипт для каждой кнопки? - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю с Unity и мне нужна помощь опытного пользователя. Если у меня есть 2 кнопки, я должен использовать 2 сценария (по одному для каждой кнопки) или только один для обеих кнопок? Как это применимо в большем масштабе с несколькими кнопками?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Зависит от того, где находится кнопка. Обычно кнопки сгруппированы на панели. Например, есть панель меню паузы с кнопками (например, кнопки сохранения, перезапуска игры) и меню настроек с кнопками. Вы сгруппируете эти кнопки с другими объектами пользовательского интерфейса под панелью, основываясь на их действиях и когда они должны быть видны.

Вам не нужен новый скрипт для каждой кнопки. Вам нужен новый скрипт для каждой сцены или панели меню. Итак, каждая сцена, меню или панель могут иметь скрипт, который обрабатывает их кнопки.

Вы можете иметь переменные общедоступных кнопок, а затем использовать событие onClick, чтобы подписаться на их события нажатия для кнопок, которые находятся на той же панели или в меню.

Вы можете добавить функцию для каждой кнопки:

public Button button1;
public Button button2;
public Button button3;
public Button button4;

void OnEnable()
{
    //Register Button Events
    button1.onClick.AddListener(() => buttonCallBack1());
    button2.onClick.AddListener(() => buttonCallBack2());
    button3.onClick.AddListener(() => buttonCallBack3());
    button4.onClick.AddListener(() => buttonCallBack4());
}

private void buttonCallBack1() { }

private void buttonCallBack2() { }

private void buttonCallBack3() { }

private void buttonCallBack4() { }

Или используйте одну функцию для всех из них, а затем используйте оператор if для обработки каждой отдельной кнопки. Если кнопки - это одна и та же панель, я обычно использую одну функцию для группировки и обработки их кликов, как показано ниже:

public Button button1;
public Button button2;
public Button button3;
public Button button4;

void OnEnable()
{
    //Register Button Events
    button1.onClick.AddListener(() => buttonCallBack(button1));
    button2.onClick.AddListener(() => buttonCallBack(button2));
    button3.onClick.AddListener(() => buttonCallBack(button3));
    button4.onClick.AddListener(() => buttonCallBack(button4));
}


private void buttonCallBack(Button buttonPressed)
{
    if (buttonPressed == button1)
    {
        //Your code for button 1
        Debug.Log("Clicked: " + button1.name);
    }

    if (buttonPressed == button2)
    {
        //Your code for button 2
        Debug.Log("Clicked: " + button2.name);
    }

    if (buttonPressed == button3)
    {
        //Your code for button 3
        Debug.Log("Clicked: " + button3.name);
    }


    if (buttonPressed == button4)
    {
        //Your code for button 4
        Debug.Log("Clicked: " + button4.name);
    }
}
0 голосов
/ 05 ноября 2018

Вы бы довольно жестко закодировали функциональность каждой кнопки? Сделайте отдельные сценарии.

Вы бы предпочли написать один универсальный скрипт для всех кнопок? Создайте один скрипт, который вы можете редактировать из Inspector . (если все они обычно делают одно и то же, это, вероятно, лучший вариант)

См. UnityEvent для последнего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...