关于复制的那些事

一个前提

联机看起来是联机,其实低层本质是平行世界,而联机能力只是在两个世界里让对应的东西建立起量子纠缠(也就是Replicate复制),只不过,现实的量子纠缠没有空间与时间的限制,而联机却受到网速的限制。

不管是ListenServer的方式开启游戏,客户端加入,还是以DedicatedServer启动,两个客户端面加入。Server与Client两者只是建立好一套沟通规则,其中比较重要的东西要复制,而不重要的,比如:环境模型、特效、声音等,不需要复制,这也是官方里讲的。这样一个可以联机的情况就ok了。

其中有些概念比较不好理解:

  1. Relicate 复制:就是建立起量子纠缠,让服务器和客户端某个一样的之间可以重要沟通。有时没有进行复制,也可以看到一样的结果,只是因为在两个世界的产生变化前的那个瞬间,做出一样的行为逻辑,从而过程一致,结果一样。所以有时会有这样让人误解的情况发生。同时因为这样,做为服务器本应该作为权威处理一切事务,但算力与网速毕竟有限,现代的多人游戏设计中,只保留最重要的那部分,比如:生命、伤害、命中等,而位置、技能等,只是同步状态,根据视觉来调整同步频率,从而节省资源。
  2. Relicate Movement运动复制:这个只存在于根节点上的Actor,比如Pawn、场景中的一个StaticMeshActor。开启后他们同步Movement和Location,在服务器改变后会同步给客户端。
    1. 大多数组件在蓝图中可以直接通过开关方式来设置,但有些在设置中没有,这时需要去调用SetIsReplicated来设置。
  3. 时间轴Timeline也可以复制,通常时间轴的开始与结束由服务器控制,而客户端直接开始Update
  4. Component Replicate组件复制:这个组件自己与对应服务器上的自己建立量子纠缠,服务器端有什么修改会同步给客户端。

评论