【UGUI】制作用于开关多个游戏对象的开关
1、制作 Toggle
老三样启动!!
- 创建一个 Toggle(开关)。
- 为其添加组件 Udon Behaviour。
- 创建一个 Udon Graph Assembly 脚本。
将 Udon Behaviour 组件拖入 Toggle 下的 On Value Change 一栏,右上角 Function 选择栏选择 UdonBehaviour>SendCustomEvent(String)
,在下方输入框输入 IsTrigger
充当发送事件。
2、绘制 Udon Graph
定义变量
我们需要为这个项目定义两个变量,在 Udon Graph 界面左侧的 Variables(变量)一栏,点击 +号 以添加不同类型的变量。
变量后缀【公开】意味着此变量为 Public(公开)变量,点击任意变量左侧的箭头展开即可编辑该变量的 Public 值(勾选)
- toggle【公开】:一个 Toggle 类型,用于指定并获取特定开关的信息状态。
- target【公开】:一个 GameObject[] 数组类型,用于指定多个游戏对象(哪些 游戏对象 受到这个开关的控制)。
编辑节点
按照下图绘制 Udon Graph 即可完成此部分操作。
解释说明
二话不说,先准备一个 Custom Event 作为事件接收,输入 isTrigger
完成操作。
要想同时开关多个游戏对象,我们先需要准备一个游戏对象数组 GameObject[]
以容纳我们想要开关的多个游戏对象,接下来我们需要想办法让多个对象能在一个事件的影响下“同时”打开和关闭,为此我们用到的方法为“遍历数组”。
为此我们需要先解释两个前置的编程概念,一个是数组,一个是For循环。
数组
在 C# 中,数组是一个可以按照一定顺序存储元素类型与值的顺序集合,datatype
意味着数组中元素的类型(例如 int,float,bool),arrayName
是数组的名称(可自己定义),{ 1, 2, 3, 4, 5 }
则代表数组存储的值,大致意味着数组长成这个样子。
datatype[] arrayName = { 1, 2, 3, 4, 5 };
简单联想一下,gameobject[]
就是存储多个游戏对象信息的有顺序的集合,从0开始存储每一个游戏对象信息,当然也包括游戏对象的开启和关闭状态。
我们只需要找到一个办法将数组内每一个游戏对象的开启/关闭状态受到 Toggle 状态影响就好了。
For 循环
在 C# 中,for
循环是一种控制结构,用于重复执行一段代码,直到满足特定条件。以下是 for
循环的基本语法
for (初始化; 条件; 迭代)
{
// 循环体
}
- 初始化:在循环开始前执行一次,用于初始化循环控制变量。
- 条件:每次循环迭代前都会检查,如果条件为
true
,则执行循环体;如果为false
,则退出循环。 - 迭代:每次循环体执行完后执行,用于更新循环控制变量。
我们只要为 for 循环设置一个条件,即可让他按照我们预设的规律不断运行下去,咱们正好可以用这个功能来访问和修改游戏对象数组内的任意属性,爽死了!!
- start:从什么数开始循环?默认从0开始就好了。
- end:在什么数结束循环?当然是我们数组的最大大小哩,为此,我们使用 Get Length 节点获取游戏对象数组的长度,并将获得的值塞入 end 这一个节点当中。
- step:整体循环重复几次?咱们只需要循环一次就足够了,所以写1。
- int index:每次循环到数组的第几个元素了?咱们需要这个值用来给数组的每一个元素施加相同的操作(遍历),我们使用 Get 节点获取每一个数组内元素指向的真实游戏对象,并使用 Set Active 来决定它的开启/关闭状态,最后我们使用 Get Is On 来获取开关的开启或关闭状态,并将其作为布尔值输入至 Set Active 来决定每个游戏对象的开启/关闭状态。
- Body:每当 For 完成一次循环,Body 就会输出一次“流”,用于“激活”下一个节点,将其接入 Set Active 意味着 For 每循环一次就要通过 Set Active 决定一次当前数组特定顺序的游戏对象的开启/关闭状态。
- Exit:退出循环时发送一个“流”,暂时不需要,不用理它。
Set Active 如何完成它的任务?
让我们先看看 Set Active 长什么样子罢:
Set Active 总共有两个输入,分别为 instance 和 value,instance 决定要设置的游戏对象,value决定要设置游戏对象开启/关闭状态为“开启(true)”或者“关闭(false)”。
如同前文所述,我们用 Get 获取游戏对象数组内指定的游戏对象(instance),再通过调用开关的值(value)来打开/关闭游戏对象。
Set Active 会在每次 For 执行一次循环时针对处在当前循环的游戏对象执行一次操作,顺而逐个打开/关闭游戏对象。
3、使用脚本
我们在前文设置了两个公开的值 toggle 和 target,在 toggle 中拖入目标开关(toggle),在 target 中设置 size(大小)以调整数组大小,再将目标游戏对象一个一个拖入对应的框中即可。
祝使用愉快!!
No Comments