Udon Graph 基础教程-脚本数据互相交换以及互相触发以及自我延时循环
大家好,欢迎来到Udon Graph基础教程,本期我们来讲讲多个Udon脚本之间的数据交换问题在Graph的解决方式。
数据交换:
UdonGraph提供了一个名为ProgramVariable的功能,该功能一共有三个模块,分别是Set ProgramVariable,Get ProgramVariable ,Get ProgramVariableType
这两个的作用分别是:获取指定Udon脚本的指定参数,设置指定Udon脚本的指定参数,获取指定Udon脚本的指定参数的参数类型
Set ProgramVariable
这个模块可以将接入Value
这个模块可以输入两个参数,分别是Instance和SymbolName
Instance(UdonBehaviour)
用于接入UdonBehaviour型的数据,表示“将数据输出到哪里”,在不介入数据时,默认对象为Self(自己)
SymbolName(string)
用于接入String型的数据,表示“将数据存放在哪个参数”
Value(gameobject)
用于接入需要发送的数据表示“需要发送的内容”
即使数据并没有成功写入,无论出于什么原因,脚本都不会报错——在发现跨脚本参数没有传递成功的时候,请检查是不是
SymbolName输入错误的原因
Get ProgramVariable
与名字相同,这个模块的作用是主动从指定的脚本获取指定参数参数的数值
这个模块可以输入两个参数,分别是Instance和SymbolName
Instance(UdonBehaviour)
用于接入UdonBehaviour型的数据,表示“从何处获取数据”
SymbolName(string)
用于接入String型的数据,表示“获取的参数的名称为什么”
数据输出
该模块可以输出一个Object型的数据,在实际使用中,该输出后会继承获取的数据的类型
Get ProgramVariableType
如果您仅需要知道参数的类型,而并不希望获取参数的数值,可以使用这个模块来获取指定参数的数据类型,该接口会输出指定的参数的数据类型,以Type的形式输出。使用方法与Get ProgramVariable相似。
使用这三个组件,即可实现UdonGraph中与其他脚本交换参数数据。
相互触发:
Udon脚本之间相互触发,是通过Custom Event与Send CustomEvent来实现的,脚本通过调用Send CustomEvent来触发指定脚本的自定义事件。
注意:同时SendCustomEvent也可以触发自身所在的UdonBehviour,只需要Instance留空,目标就会默认为自己
请不要使用SendCustomEvent直接构筑循环,因为会导致无限循环导致爆栈。请使用sendCustomEventDelayedFrames和sendCustomEventDelayedSeconds这来将循环延时避免爆栈。
sendCustomEvent一共有四个组件,分别是sendCustomEvent,sendCustomEventDelayedFrames,sendCustomEventDelayedSeconds,SendcustomNetworkEvent
SendCustomEvent
该模块用于触发自定义事件,在instance没有接入参数之前,它默认的触发对象为自身,他会在接收到触发之后,尝试触发指定脚本的名为”EventName“的事件。
主意:即使触发失败,该模块也不会回报错误。
本组件一共可以接入两个参数,分别是Instance 和 EventName 即目标和事件名称
Instance(UdonBehaviour)
用于接入UdonBehaviour型参数,接入参数时,SendCuston的目标会转移为设置的UdonBehaviour脚本,而当未接入时,模块的目标会被设置为Self
EventName(string)
触发的自定义事件的名称,只有当接入的名称与需要触发的事件的名称一样时,事件才能被触发。接口可以接入string参数,可以通过string类中的“custom string”来指定事件名称。如果instance没有接入,后面的选择框会自动出现所有已经至少接入了一个模块的本地自定义事件的名称。
后续的三个都包含上面的两个参数,后续不再写出。
sendCustomEventDelayedFrames
与sendCustomEvent相比,这个组件增加了一个名为DelayFrames的参数,数据类型为(Int)。该模块会在延迟指定帧之后执行事件。
DelayedFrames(int)
设定延迟多少帧后运行,注意,这里的帧指的时UDON帧而非实际帧率,也就是所谓的CPU帧。
EventTiming(EventTiming)
这个参数用于设定发送事件是在指定帧的开始时插入,还是结束时插入。
SendCustomEventDelayedSeconds
与sendCustomEventFrames相比,这个组件将DelayFrames替换为DelaySeconds的参数,数据类型为(Float)。该模块会在延迟指定秒数之后执行事件,一般用于延迟触发或者计时器来使用。
DelayedSeconds(Float)
设定延迟多少秒后运行
EventTiming(EventTiming)
这个参数用于设定发送事件是在指定帧的开始时插入,还是结束时插入。
SendcustomNetworkEvent
这个是一个网络同步版本的SendcustomEvent,与CustomEvent相比,这个组件会将触发所有Target所指定的人的对应自定义事件。与sendCustomEvent相比,这个组件多了一个Target的接口,用于设定发送(同步)的目标
当事件名称前面带有“_”时,事件会被认为是本地事件,不会发送至其他人手中
Target(NetworkEventTarget)
这个参数用于设定事件会发送到哪个人的脚本,一共有两个选项—ALL和Owner
ALL:发送到当前场景所有的玩家
Owner:将数据发送至对象所有者
关于网络同步问题,请移步https://creators.vrchat.com/worlds/udon/networking/了解,这里不详细概述。
感谢您的阅读,我们下期再见。
No Comments