c# - 我应该在多个按钮上统一使用单个脚本,还是为每个按钮创建一个脚本?
问题描述
我正在使用 Unity,需要有经验的用户的帮助。如果我有 2 个按钮,我应该使用 2 个脚本(每个按钮一个)还是两个按钮只使用一个?这如何在具有多个按钮的更大范围内应用?
解决方案
这取决于按钮的位置。通常,按钮被分组在一个面板中。例如,有带有按钮的暂停菜单面板(如保存、重新开始游戏按钮)和带有按钮的设置菜单。您可以根据这些按钮的操作以及它们应该何时可见,将这些按钮与其他 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);
}
}
推荐阅读
- r - 取一列并转换为 R 中每个 id 的计数
- neo4j - Neo4j 为密码查询返回无值
- excel - 将最后 n 个单元格相加,不包括空格和输入数字时的移位
- git - Git log --all --oneline --decorate --graph 不显示带有星号行的分支
- python - 如何在 Pandas 中将多个列表保存到多行中?
- docker - Kubernetes CrashLoopBackOff
- python - 多标签任务的平均编码
- amazon-web-services - AWS 检查配置为使用即将弃用或已弃用的运行时的 Lambda 函数
- c# - 变形器在统一时不适用于我的 mdoel
- sql - 如何使用 ID 从另一个表(sql server)获取名称值