同步方式分状态同步和帧同步
状态同步需要解决:
客户端预测,服务端延迟补偿,客户端接到消息时的插值
帧同步需要解决:
定点数,预测回滚,战斗数据序列化(做成自动化生成的),操作包的压缩优化,自己写碰撞系统,逻辑和表现分离,冗余udp,udp包的ack,udp的乱序,udp拆包粘包,udp的非阻塞模式(接受1个消息时放入队列中,不阻塞下一个消息的接收),服务端剔除udp重复包和剔除同一帧的操作,日志上传,不同步的检测工具,此外还有其他的一些细节和问题,暂时记不清了,想起了再补
1.状态同步,mmo类型的游戏技能系统(基于技能模板)
ActorSystem(单位系统,管理场景中的Actor)
ActorEntity(单位实体):持有BuffEntitys,SkillEntitys
监听ui层技能按钮的点击,点击后回调CasterId(释放者Id)和SkillId(技能id)到SkillValid(客户端本地的技能释放验证),
通过后表现层先播放前摇动画,且发释放技能的消息到服务器,服务器接收到消息后经过验证后返回释放消息给释放者特定范围内的玩家,客户端接收到消息后,发现不可释放(比如被服务端判定为死亡)则前摇动画中断。服务端在一定延迟后(前摇时间-上行 * 2),会执行技能阶段(根据释放的技能id得到SkillConfig,再根据SkillConfig中的技能模板id组装出SkillEntity,且存储到ActorEntity的SkillEntitys中,不同的技能类型进行不同的技能碰撞判定,如法术场,弹道等)。将结算下发给在这个范围内的