所有示例使用第三人称模板创建的项目并带有初始资源StarterContent
和Actor与Function一样,变量也可以通过修改Replication属性实现网络同步,而变量的Replication属性中有Replicated和RepNotify两种属性,这两种属性分别有什么作用呢?
首先我们操作Replicated:
1、打开 Content/StarterContent/Blueprints中的Blueprint_Effect_Fire 蓝图,在Details面板中找到并勾选Replicates 选项。
2、为蓝图添加一个Text Render组件,并调整到合适的位置。
image.png
3、准备工作完成,下面直接上蓝图。逻辑非常简单,功能是开始运行的时候在服务器上执行CountTimer每秒+1的逻辑并且在TextReder中同步更新显示CountTimer。
image.png
4、把蓝图拖进关卡后点击Play开始运行。
image.png 可以看到客户端和服务端都有显示特效,但是服务端的数字会增加到10,而客户端的数字不会增加。这是因为数字增加的逻辑只在服务器上运行。
5、但是我们将CountTimer的Replication属性设置为Replicated呢?
image.png
其他地方不变,我们重新开始运行。
image.png
可以看到,客户端和服务端的数字都发生了改变。因为Replicated会让客户端生成一个服务端的变量副本到本地。
然后,我们来试试RepNotify:
1、打开特效蓝图,修改UpdateTimer函数,增加一段变量增加到10之后不再显示特效的逻辑。
image.png
2、编译运行。
image.png
变量增加到10之后只有服务端隐藏了特效。
3、打开特效蓝图添加一个Deactivated的Boolean的变量并将Replication设置为RepNotify。设置之后可以看到在Functions下面生成了一个OnRep_Deactivated的函数。这是因为RepNotify会提供一个在变量更新时调用并在服务器和客户端上同时执行的函数。
image.png
4、将隐藏特效的逻辑移到OnRep_Deactivated函数中。
image.png
5、修改UpdateTimer函数。
image.png
6、编译运行。
image.png
此时当数字增加到10之后客户端和服务器都隐藏了特效。
通过这次测试我们可以看出,同步变量可以将变量设置为Replicated来在客户端生成一个变量副本,也可以设置成RepNotify,这个属性不仅拥有Replicated的所有操作,还会提供一个函数。这个函数会在变量更新时调用并在服务器和客户端上同时执行。
网友评论