2.2 - 网络关联性(第二部分-函数复制解决方案的尝试)

2_2.png

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

概述

本实例尝试通过使用复制的Multicast函数来网络化对箱子的操作。 思路是让箱子调用与其互动的multicast函数,而其将会对所有客户端处理开箱子的视觉效果。

但是,为展示关联性,此箱子已被修改从而在非常近的距离中成为网络不相关。 将客户端放置在篮圈外,箱子将与客户端不相关,尽管其为可见。 现在移动服务器到箱子处以激活它并观察在客户端上发生的内容。 客户端根本看不到任何变更! 这是我们预期的情况,因为箱子与客户端并不相关。 将客户端移动到篮圈,将会造成箱子与客户端相关。 现在会发生什么呢? 仍然什么都没发生,这不是我们预期的。

这个解决方案的问题是所有与更新箱子相关的操作都通过复制的函数来传递。 客户端没有接受关联性的函数调用,并且从不进行任何操作来开箱子。

蓝图详细信息

BP_Relevancy_Replication_RPC 蓝图的事件图表中,您将会注意到它来源于示例2.1,不过对其进行了一些修改(同时生成了圈以展示此示例的关联性距离)。 首先,OnChestTouched函数被覆盖,并且新的 Chest Touch Multicast (箱子触摸多路广播)事件被调用。 Chest Touch Multicast (箱子触摸多路广播)事件在服务器上被调用,并且由于事件被设置为 Multicast (多路广播),它将在随后复制事件到所有的远程机。

点击查看放大图片

Chest Touch Multicast (箱子触摸多路广播)事件本身随后从处理开箱和播放相关特效的父蓝图中执行 Open Chest (开箱)和 Play Gold FX (播放金币特效)函数。

然而如箱子与客户端不相关,客户端将如下图中那样跳过此部分脚本的执行。