一 帧同步简介¶
帧同步特点¶
- 帧同步:只转发操作
- 游戏逻辑都在客户端实现,服务器主要负责广播和验证操作
- 逻辑易实现,数据量少,可重播。
- “慢”优势(严格帧同步)&乐观帧同步:简单一点
- 有利于回放、观战(状态同步存快照也可以做到)
- 容易作弊,安全性差
- 同步问题具有挑战性
- 定点数
- 大端小端问题
- 伪随机数
状态同步特点¶
- 战斗逻辑在服务端
- 每次改变:同步一次属性(帧同步不需要)
- 安全性好
帧同步原理¶
- 逻辑帧:时间片划分,目标是同步所有客户端
- C/S架构:服务端转发操作,客户端执行逻辑
二 定点数与浮点数¶
Unity实现值变量其实也是依靠的结构体来的,要继承几个接口来使用. - IEquatable:需要重写Equal判断相等的方法。 - IComparable: 需要重写排序(大于小于)的方法。
标准¶
- One:1左移12位
- Zero:0
加减乘除¶
- 加法减法:纯加减
- 乘法:需要右移12位
- 除法:需要左移12位
类型转换¶
有点drama: long还好:左右移动12位就行 float是:long类型的数乘除One(感觉就是左右移啊?),再强转为float。反过来也类似,有点抽象。
三 定点数向量类¶
Unity的向量也是浮点数的,咱们要做个定点数的。
等于逻辑¶
其实逻辑基本上和默认Vector没啥太大差别,就是等于我们只需直接判断相等就好了。而float是判断小于一个特别小的数。
四 定义服务器玩家数据类型¶
七 服务端处理¶
7.1 帧号--操作 字典数据¶
7.2 guid--同步帧号 字典数据¶
7.3 补发数据¶
如果和服务器帧数不同,补发之前的帧号--操作 数据,交由客户端进行快速追着你