C# 我应该在unity中的多个按钮上使用一个脚本,还是为每个按钮创建一个脚本?

C# 我应该在unity中的多个按钮上使用一个脚本,还是为每个按钮创建一个脚本?,c#,unity3d,C#,Unity3d,我与Unity一起工作,需要有经验的用户的帮助。如果我有两个按钮,我应该使用两个脚本(每个按钮一个)还是两个按钮都使用一个脚本?这在多个按钮的更大范围内是如何应用的?您愿意硬编码每个按钮的功能吗?制作单独的脚本 您愿意为所有按钮编写一个通用脚本吗?制作一个可以从中编辑的脚本。(如果他们都做同样的事情,这可能是更好的选择) 请参阅了解后者。这取决于按钮所在的位置。通常,按钮分组在一个面板中。例如,有带按钮的暂停菜单面板(如保存、重新启动游戏按钮)和带按钮的设置菜单。您可以根据这些按钮的操作以及它们

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

您愿意硬编码每个按钮的功能吗?制作单独的脚本

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


请参阅了解后者。

这取决于按钮所在的位置。通常,按钮分组在一个面板中。例如,有带按钮的暂停菜单面板(如保存、重新启动游戏按钮)和带按钮的设置菜单。您可以根据这些按钮的操作以及它们应在何时可见,将它们分组到面板下的其他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);
    }
}

您甚至不需要命名函数
onClick.AddListener(()=>{/*code here*/})程序员只是将其用作命名函数的包装器,但直接使用委托也可以。