帧同步技术目标总结
发表于2018-02-24
本文首发于知乎专栏:MACK的游戏开发笔记,欢迎各位关注。
在写一些网络优化总结的时候,翻到了年初3月份写的技术目标。在此之前因为玩法在不断摸索,主要的时间都在独立解决一些问题上,几乎不会涉及到技术任务的分配。但因为4月份版本需要上线测试而且至关重要,但当时的版本还过于Demo化延迟性能等都有不少问题,因此也被委以重任制定技术上下个月版本的技术目标,希望能有所提升。
着实挖空心思了一番!丧尽天良的列出了一大堆优化目标(也厚颜无耻的请教了很多成功项目同事朋友>_<)。。。
经过大家的不懈努力,两个版本之后基本所有的优化点都已完成(游戏功能也在不断开发),之后的版本有了大幅提升,顺利的经过了n轮测试。现在回头看看,真是一个非常痛苦而又快乐的过程,痛并快乐着,我想这就是游戏开发的真实写照。
- 网络优化:
- 客户端和服务器立即发消息的收发方式。【优先级高】。现在服务器和客户端有个缓存队列(可靠UDP的机制,改进后我们将使用TCP,可靠UDP,非可靠UDP三种网络方式)消息不回立即发送。降低延迟。
- 客户端收发协议多线程。【优先级高】。更快的收发包,减少不受客户端帧率影响。
- 实现非可靠UDP。【优先级高】。当用户网络不稳定丢包时可大幅降低延迟。使用冗余包的方式保证UDP可靠,比现在的ACK保证可靠性流量更大但延迟率低。
- 网络数据测量分析。【优先级高】。测量纯网络ping值,和游戏真实ping值。定位延迟问题,目前正常ping值在30ms左右,但网络层实际ping值在100ms左右,定位问题和解决方案。实际主要是因为客户端逻辑层和表现层的更新顺序问题。
- 断线重连。【优先级高】。分析和制定更好的断线重连方案,测试提供测试用例,需要策划配合。review和方案讨论的时间,具体修改方法还需要测试讨论。
- 将帧协议从protobuff改为二进制流。【优先级低】。针对混战角色较多提升客户端收发包性能。
- 移动的行为预测,表现层预表现一段时间玩家操作,使用航位预测算法平滑渲染层和逻辑层,降低移动延迟。
- 协议包的压缩和限制,减小包的大小,忽略部分细微操作。
- 负载均衡机制,因为逻辑层是15帧,渲染层依赖玩家设备和游戏环境但几乎都会高于15帧,通过分摊逻辑运算降低帧率的毛刺。
- 道具掉落系统的格子算法统一。【优先级中】。目前IO模式使用了新的格子算法,匹配还是老算法。
- 贴图资源泄漏。【优先级中】。从主城到战斗等场景切换会有些贴图无法释放,导致玩家时间长之后内存膨胀。
- 堆内存优化。【优先级中】。解决游戏中顿卡问题,堆内存分析优化,通用内存池开发。
- 性能优化。【优先级中】。分析游戏的性能瓶颈解决游戏中卡,发热,帧率低等问题。已知有图形配置的调整,追帧隐藏场景等。【每次封板前后review,有针对进行优化】【持续】
- 阻塞加载场景,再来一局同一场景不进行loading。【优先级低】。提升loading速度。
- UI使用一些插件做一些动画。【优先级低】。
- 加密。使用关键数据内存加密的方式(仅客户端),使用关键数据上报服务器校验的防作弊方式。
- 使用IL2CPP取代Mono的DLL加密方式,防止代码逆向并提升性能。
- 更详细的图形配置测试,获得每个图形配置对帧率,发热耗电的数据提现,针对标杆机型普及率高的机型做深度的推荐配置,让玩家上来就获得最好体验。【优先级低】。(取决于已有机型的数量)
- 服务器白名单。【优先级中】。这几次测试也有需求开服测试时可以屏蔽玩家,但是可以运行指定IP段提前连入测试,被服务器挡掉的玩家有未开服公告。
- 热更流程优化。【优先级中】。重构现在的热更代码,和自动构建集成,支持不同服的版本使用不同的CDN配置,支持更新表格和lua,支持更新部分UI资源。【后续更多的资源更新需要对资源做更大的调整】
- GM工具。【优先级低】。现在只有发公告。
- 开关服的流程优化。【优先级低】。登陆公告,跑马灯,踢人,封号,关服倒计时,更完善的公告。需要和策划一起梳理。
- 自动构建的Build号校验
- AI行为树编辑器。【优先级低】。暴露更多的接口给策划,让策划便于编辑修改。【开发中下周】【持续】
- CMT技能编辑器。【优先级低】。开发可视化的CMT编辑器,优点不需要写代码,缺点无法配置逻辑,不灵活。【持续】
- 自动的调试菜单更美观易用,支持分页。【优先级低】。
- 支持本地录像和日志记录功能,支持关键数据校验不同步时实时上报日志供呢个。
- MainUI拆分。【优先级低】。因为开发了多个模式,很多模式的UI都混在一个预制体,战斗界面非常庞大而且容易出错,性能也差,使用不方便。可以分摊到开发过程中。【持续】
- 玩家组件系统重构。【优先级低】。纯代码重构。
- UI使用消息事件系统。【优先级低】。使用消息系统可以使UI结构更清晰减少bug,新的界面使用了历史遗留的一些界面没使用。
- 帧同步游戏内换人加入优化。【优先级低】。因为IO模式支持中途换人,每次换人的时候需要发送该玩家拥有英雄数据天赋数据非常庞大,优化为只在换人的时候同步换的角色的属性和天赋,否则后期英雄数量的时候会出问题。【是否可以不换人】
- 状态机重构。【优先级低】。统一目前游戏内的多个状态机,游戏流程使用唯一的一个状态机。客户端2天。
- 资源管理方式使用引用计数方式。【待讨论】