Skip to main content

邪修方法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();
  
  }