2.3 - 网络关联性(第三部分-变量复制解决方案的尝试)

2_3.png

为能同时从 服务器客户端 进行查看,请在 Play (运行)的下拉框中,设置 Number of Clients (客户端数量)区域为2。

概述

示例2.2失败了,因为复制的Multicast函数没有在执行后处理对箱子状态的保留。 在这种情况下,一种很自然的解决方法是尝试使用复制的变量来解决这个问题。

本例中,RepNotify布尔值被用来保存箱子为开启或关闭的状态。 我们再一次将客户端划出蓝圈外并让服务器激活箱子。 当客户端在之后马上进入蓝圈内会发生什么? 客户端侧能看到箱子开启,但同时也会看到黄金特效的播放,而这个特效之前在服务器上已经发生!

当箱子再次与客户端相关时,客户端会获取对复制变量的变更,并且调用相关RepNotify函数。 不幸的是,客户端无法获知变量实际上在过去发生了很大的变化,只是获知它发生了改变,而这对于处理此例是不够的。

蓝图详细信息

BP_Relevancy_Replication_RepNotify 蓝图的事件图表中,如下方有注释的图片所示,OnChestTouch被覆盖以设置RepNotify变量,而此变量的OnRep函数负责处理开箱的视觉效果。

2_3_Eventgraph.png

下方是在变量 bChestOpened 被更新时调用的OnRep函数。

点击查看放大图片

当箱子具有关联性时,这样可以让客户端获取更新值,它同时表示对于客户端,即使黄金特效应该在很久以前在服务器上完成播放,这种不需要的黄金粒子特效仍然会在客户端进行播放。