邪修优化1:还在傻乎乎给每一个按钮配一个Udon脚本来实现传参?邪修教你用Toggle替代Button来实现按钮传参
总所周知,按钮只能通过SendCustomEvent方法向UdonBahviour发送事件,但是在很多场景下我们其实需要按钮携带一定的参数,最简单的莫过于我们需要一堆相同性质的按钮的ID编号,来确定到第是哪个按钮触发了事件。
我个人选择的一个方案是,用Toggle和Udon代码结合,通过在触发Toggle的时候遍历所有Toggle的IsOn属性,此时改Toggle在数组中的位置就是其携带的参数。我们可以通过继续创建一个于Toggle等位的数组并使用Toggle在数组中的位置作为索引获取携带的参数,或者是通过Toggle.name之类的方法,实现按钮携带参数的实践
使用这个方案会有以下的有点:
1:降低管理难度
常规的做法上需要我们为每一个按钮都安排一个Udon脚本进行转发参数或者在主脚本中添加单一独立的Public事件,让每一个按钮在脚本中都有对应的Public方法,才能实现按键传参的效果。
我们这个方法可以通过可接受的性能消耗下,解决这个问题。且后期如果需要继续增加数量也只需要继续扩展数组,无需更加复杂的操作。极度方便复制粘贴人士。
2:降低Udon虚拟机数量
本方案下因为不再需要为每一个按钮配备一个Udon脚本,Udon脚本的数量有明显减少。
使用这个方法需要注意以下几点:
1:Toggle数量过多的时候依然会有管理困难的问题,可以通过分区的方式来解决。
2:性能损耗会随着Toggle的数量的增加而增加,使用的时候需要考虑性能损耗问题,可以通过额外的脚本将其分区来实现性能和方便的平衡。
以下为示例代码
//第0事件——初始化
public Toggle[] Toggles;
private start()
{
for (int i = 0; i < Toggles.Length; i++)
{
Toggles[i].SetIsOnWithoutNotify(false);
}
}
//计算是哪个按钮被按下
private int CheackToggleIndex()
{
int ToggleIndex = 0;
for (int i = 0; i < DishesToggle.Length; i++)
{
if (DishesToggle[i].isOn)
{
ToggleIndex = i;
Toggles[i].SetIsOnWithoutNotify(false);
break;
}
}
}
//按钮触发
public void OnToggleUse()
{
int ToggleIndex = CheackToggleIndex();
}