Language:
Page Info
Engine Version:
Share

2.2 - 网络相关性[第2部分 - 函数复制解决方案尝试]

2_2.png

为了能够从 服务器客户端 两个视角进行查看,请在 运行(Play) 下拉菜单中将 客户端数量(Number of Clients) 字段设置为2。

在本示例中,我们尝试通过使用复制的组播函数经网络传递宝箱的行为。我们的想法是,当有玩家与宝箱交互时调用组播,它将处理所有客户端上的宝箱打开视觉效果播放。

但是,为了展示相关性问题,我们对宝箱进行了修改,取消了距离它很近时的网络相关性。只要客户端位于蓝圈外面,宝箱就与客户端不相关,即使它可见也不例外。现在让服务器靠近宝箱以激活它,然后观察客户端上会发生什么。在客户端上根本看不到任何变化!这在意料之中,因为宝箱仍与客户端不相关。将客户端移到蓝圈里面,使宝箱与客户端相关。现在情况如何呢?在客户端上仍然看不到任何变化,这并不是我们想要的。

该解决方案存在的问题在于与更新宝箱相关的所有操作都是通过复制的函数发送的。客户端没有接收到对相关性进行的函数调用,从而未执行任何打开宝箱的操作。

蓝图详细介绍

BP_Relevancy_Replication_RPC 蓝图的事件图表中,你将留意到它继承自示例2.1,但是我们对它进行了一些修改(针对本示例,我们也生成了一个圆圈,以展示相关性距离)。首先,OnChestTouched函数将被覆盖,将调用新 宝箱触摸组播(Chest Touch Multicast) 事件。宝箱触摸组播(Chest Touch Multicast) 事件在服务器上被调用,然后它会将该事件复制到所有远程计算机上,因为该事件设置为 组播(Multicast)

单击查看大图

然后,宝箱触摸组播(Chest Touch Multicast) 事件本身将执行来自父蓝图的 打开宝箱(Open Chest)播放金色特效(Play Gold FX) 函数,它们分别处理宝箱打开和关联效果的播放。

但是,如果宝箱不相关,客户端将不执行这部分脚本,如下列图像中所示。