复制图表概述和正确的复制方法

 

感谢在虚幻引擎学习路上有您的陪伴,周年庆筹备中,敬请期待!

如果要制作类似于《堡垒之夜》这样的大型多人在线游戏,标准的网络复制策略完全无法带来预期的效果。在动态场景中存在50000个Actor并且同步的情况下,如果多达100个客户端(玩家)四处移动,确定每个Actor与每个客户端的“网络相关性”会加重服务器CPU负荷。尽管您可以通过降低复制速率和错开Actor更新时间的方法减轻CPU负荷,但是由于更新频率降低了,客户端体验将变得迟缓。更重要的是,这种方法无法解决根本性问题——在每帧上针对每个客户端测试每个Actor的总体策略无法很好地满足大型游戏的需求。

 

对于这类大型游戏,需要采用不同的方法。为此,我们构建了复制图表(Replication Graph)插件。复制图表可以很好地应对大型多人游戏,因为通过减少冗余工作和缓存数据而非始终重新计算,它减轻了服务器CPU问题。它的实现机制有二,一是依据Actor在游戏中的作用以及Actor与其他Actor的关系以不同的方式处理Actor;二是存储可供多个Actor、多个客户端使用的数据,甚至是可跨多个帧使用的数据。

 

复制图表 包含一系列复制图表节点。这些节点根据需要创建要复制到每个客户端的Actor列表。这些节点为持久对象,可跨多个帧存储数据以及在客户端连接间共享结果。它们可以基于相对较小的数据集运行,而非在每帧上针对每个连接对每个Actor求值。由于使用了持久和可共享的数据,复制图表系统能够快速为客户端生成复制列表,而且能够充分处理大型多人游戏。

 

该系统为连接和Actor提供了更加一致的数据结构,因此可以拉取相关数据并快速进入流程的下一阶段。

 

借助复制图表(Replication Graph)插件,您可以确定应将哪些Actor复制到哪些连接。其中包括自定义打开Actor信道的时间和方式、在这些信道上复制Actor的时间以及关闭这些信道的时间。因此,这可以帮助您提高效率并除去冗余。

Unreal Engine 4 版本信息

4.21.1

版本

18.11.5

发布日期

28Gb

安装容量

PC/Mac

支持平台