Skip to main content

事件篇

本篇章将讲述网络同步有关的事件


网络同步有关的事件分为以下几个部分

 

1:与序列化相关事件

 

OnPreSerialization()

在同步数据发送前触发。

 一般来说,当需要同步的数据不存在与本地或者需要额外处理时,我们会需要OnPreSerialization()事件。在大部分设计模式里,OnPreSerialization事件都是不需要的。

OnDesSerialization()

在同步数据接收后触发。

 OnDesSerialization()是基本上大部分的网络同步模式的核心。除了主机外,玩家在完成所有的变量更新后都会触发,而主机也可以通过主动触发来实现发送数据后触发OnDesSerialization事件。

OnPostSerialization()

在同步数据发送后触发,返回发送结果。

 OnPostSerialization()事件用于所有权具有不可预测性,或者数据量过大的同步脚本中,用于检查数据发送情况和结果,在大部分的情况下这个OnPostSerialization都是不需要的

2:与所有权有关事件:

 

OnOwnershipRequest()

当所有者转移事件触发时,由现在的所有者触发。当所有者转移事件被触发时,由现在的所有者触发,用于审核所有者转移申请。

Tips:一般来说如果没有定义这个事件,会默认放行所有所有权转移。如果这个事件被定义了,则必须要这个事件返回了true,所有权转移才会触发。如果没有强制要求,我不太建议任何人使用这个功能,因为这会让你的代码难以调试。

 
OnOwnershipTransferred()

当所有者转移时触发。

这个事件一般用的也少,主要用于和OnOwnerShipRequest搭配,在Owner转换成功时进行初始化自身权限以及进行初次同步使用。

 

3:同步变量相关事件:

OnOwnershipTransferred()OnVariableChanged()

当所有者转移时触发。

 

3:同步变量相关事件:

 

OnVariableChanged()

根据官网介绍,当指定变量改变时会触发这个事件,但是在UdonSharp和Graph中似乎并不存在这个事件,UdonSharp可以通过特殊的方法实现这个事件的效果,详情请见其他章节。详情请见上一章节。