首页 > 解决方案 > 我应该在多个按钮上统一使用单个脚本,还是为每个按钮创建一个脚本?

问题描述

我正在使用 Unity,需要有经验的用户的帮助。如果我有 2 个按钮,我应该使用 2 个脚本(每个按钮一个)还是两个按钮只使用一个?这如何在具有多个按钮的更大范围内应用?

标签: c#unity3d

解决方案


这取决于按钮的位置。通常,按钮被分组在一个面板中。例如,有带有按钮的暂停菜单面板(如保存、重新开始游戏按钮)和带有按钮的设置菜单。您可以根据这些按钮的操作以及它们应该何时可见,将这些按钮与其他 UI 对象分组在一个面板下。

您不需要为每个按钮创建新脚本。您需要为每个场景或菜单面板创建一个新脚本。因此,每个场景、菜单或面板都可能有一个处理其按钮的脚本。

您可以拥有公共按钮变量,然后使用该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);
    }
}

推荐阅读