一、用 Toggle 替代 Button 来实现按钮传参
还在傻乎乎给每一个按钮配一个Udon脚本来实现传参?邪修教你用Toggle替代Button来实现按钮传参
众所周知,在 VRChat 的 Udon 开发中,按钮默认只能通过 SendCustomEvent
方法向 UdonBehaviour
发送无参事件。但实际开发中,我们常需按钮携带参数 —— 最典型的场景就是 “批量相同功能的按钮”(如道具选择、场景切换按钮),需要通过参数(如按钮 ID)确定具体是哪个按钮触发了事件。
我个人选择的方案是,结合 Toggle 组件与 Udon 代码:在 Toggle 被触发时,遍历所有 Toggle 的 IsOn
属性,此时该 Toggle 在数组中的位置就是其携带的基础参数。若需更复杂的参数,我们可额外创建一个与 Toggle 数组索引对应的参数数组,以 Toggle 在数组中的位置为索引获取参数;也可通过解析 Toggle.name
(如在名称中嵌入 ID 或标识),实现按钮携带参数的需求。
使用这个方案会有以下的优点:
1、降低管理难度
常规做法需要为每一个按钮挂载独立的 Udon 脚本转发参数,或在主脚本中添加多个独立的 Public 事件与对应方法,才能实现按钮传参。这个方法能在可接受的性能消耗下解决该问题,后期若需增加按钮数量,只需扩展数组即可,无需复杂操作,对需要批量复制按钮的场景格外友好。
2、降低Udon虚拟机数量
本方案无需为每个按钮单独配备 Udon 脚本,能显著减少 Udon 脚本的总数量,进而降低 Udon 虚拟机的占用量。
以下为示例代码:
//第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();
}
No comments to display
No comments to display