UE4 Navmesh剖析

  1. 网络传输协议
    1. TCP
    2. UDP
  • 网络同步模型
    1. 锁步同步(Lockstep)(帧同步)
  • 断线重连
  • 网络传输协议

    TCP

    UDP

    网络同步模型

    • 逻辑帧(Tick):游戏在逻辑层面是离散的过程,即可以认为是一个逻辑帧一个逻辑帧地进行逻辑运算,逻辑帧号是指游戏逻辑层面当前处于第几帧
    • 渲染帧(Frame):游戏在画面呈现层面也是离散的过程,即可以认为是一幅画面一幅画面地呈现给玩家的,渲染帧号是指游戏当前呈现的是第几幅画面

    • 在网络同步时,称从客户端发出信息进行网络传输的过程为上行,称客户端经过网络传输收到信息的过程为下行
    • 逻辑帧的抽象

    • 游戏在第$0$个逻辑帧时,根据玩家信息$P$和游戏配置$C$,进行初始化运算$g$,得出初始化状态集合$S_{0}$

    • 游戏在第$k$个逻辑帧时,根据前一个状态集合$S_{k-1}$和游戏配置$C$,根据第$k$帧收到的外部变化原因集合$I_{k}$,进行逻辑$t$运算,得出第$k$个逻辑帧新的游戏状态集合$S_{k}$

    • $I$是游戏状态变化的根本原因的集合,往往是各个玩家操作。

    • $S$是游戏状态的集合,由众多状态子集组成,其中有以下2个重要子集定义
      • O = { o $\in$ S | o is an important state that can be observed by the player}
        • 是一些能被玩家所明显观察到的对象的状态集合
      • M = { m $\in$ S | m is an intermediate state to infer the final state}
        • 为一些可用于推导最终状态的中间状态集

    • 一般锁步同步的本质是,上下行都仅包含游戏外部变化原因集合$I_{k}$
    • 一般状态同步的本质是,下行仅包含游戏运算得出的结果状态集合$S_{k}$(更精确地说是状态子集$O_{k}$),上行包含$I_{k}$(和/或)状态子集$M_{k}$

    锁步同步(Lockstep)(帧同步)

    • 帧同步:帧同步指的是在游戏初始状态相同的情况下,在相同时刻输入相同操作,得到相同的结果,需要以下几点来保证:
        1. 初始化时随机种子要保持一致(暴击的概率表现一致)
        1. 更新频率相同
        1. 用整形替代浮点型,保证CPU计算一致
        1. 逻辑执行顺序一致
          帧同步的流程是:
    1. 所有客户端在单位帧内进行操作并上传至服务器
    2. 服务器在单位帧结束时广播所有操作至客户端
    3. 客户端进行计算并显示至屏幕

    断线重连

    • 断线重连的方式为,客户端将服务端记录的所有操作进行加速播放,以达到与其他客户端同一时间