我应该统一使用多个脚本上的单个脚本,还是为每个按钮创建一个脚本?

时间:2018-11-05 19:03:41

标签: c# unity3d

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

2 个答案:

答案 0 :(得分:1)

这取决于按钮的位置。通常,按钮在面板中分组。例如,具有带有按钮的暂停菜单面板(例如保存,重新启动游戏按钮)和带有按钮的设置菜单。您可以将这些按钮和其他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);
    }
}

答案 1 :(得分:0)

您想对每个按钮的功能进行硬编码吗?制作单独的脚本。

您想为所有按钮编写一个通用脚本吗?制作一个可以从Inspector编辑的脚本。 (如果他们通常都做相同的事情,这可能是更好的选择)

请参阅UnityEvent