概述
这是个人学习记录的概括,因此只会列出我自己理解的要点,可能用到的基本知识我就不赘述了,UE4的官方文档已经讲的很清楚很详细。
前提条件
RPC和属性复制,这是官方文档上提供的唯二用来实现网络同步的方法。RPC和属性复制这两个词的具体意义我不想浪费笔墨说明,看官方文档即可。我想说明的是使用RPC和属性复制的前提条件。
1.客户端连接服务器并加载服务器发过来的Level以后,除却那些静态资源以外,理论上,客户端上的所有Actor均是服务端的副本,服务端才是真正的世界,是各种事件碰撞交汇之地,客户端只是单纯的将服务端的内容演示出来而已,是不具备任何自主权利的(包括代表玩家的PlayerController和Pawn)。
2.只有在服务端生成、随后同步到客户端、并且最外层Owner为拥有链接的PlayerController的Actor才有使用RPC和属性复制的资格
3.服务端和客户端使用的是同一套代码,在编码的时候无时无刻都要注意到这点
4.Actor是承载RPC和属性复制的基本单位,网络信息流仅在不同节点上的同一个Actor中流转,如果某个节点上不存在指定的Actor,那么这个节点实际上并没有参与到网络中来(仅仅对于这个指定的Actor)
第2点需要说明一下,如果某类型Actor的属性中bReplicates为true,那么当我们在服务端生成该类型的Actor对象时,将会自动复制到客户端去,无需任何其他操作。如果要让这个Actor对象能够正常使用RPC和属性复制的话,那么一定要在服务端和客户端同时保证这个Actor对象的最外层Owner为拥有链接的PlayerController(或者更加直白一点:即LocalController)。
忍不住就上面进行更加详细一点的说明:如果Actor是Pawn的话,无需我们去动手,Pawn的bReplicat