• 1. 球球大作战系列技术架构 王达
  • 2. 球球系列产品线概述球球大作战 爆破星球 怪物战争
  • 3. 球球产品线前后端推进与演化2015.7,《球球大作战》立项开发架构实现了第一版 2015.10-11,球球已经拥有日活跃17w,第二版架构调整 2015.12-2016.2,球球在100w-200w的日活跃之间,完成第三版架构改良,后趋于平稳 2016.1,《爆破星球》立项开发,泡泡堂玩法,基于球球架构积累 2016.3,爆破已经拥有1w日活跃 2016.5,爆破5w日活跃,进行了2.0版本的工具积累
  • 4. 球球大作战前端架构演化1时机:立项起初,复刻agar玩法主循环,加入团战语音等 关键词:试探性、粗放性、耦合性 特点:战斗运算归客户端、服务器聚合
  • 5. 球球大作战前端架构演化2时机:17w-50w DAU,面临社交业务系统群开发 关键词:中间层独立、业务抽离、优化消息处理业务 特点:战斗运算归服务器、模块化雏形完成、串行业务处理规范化
  • 6. 球球大作战前端架构演化3时机:65w以上DAU、加入众多圣衣和效果资源丰富表现、预备宝箱等收费系统 关键词:对象池、动画特效优化、巧用sharedmaterial、手动动态合批 特点:优化渗透中间层、游戏性能提高、开发效率提高
  • 7. 球球产品线--爆破星球前端架构在球球开发完成以后,根据球球积累进行特化
  • 8. 球球大作战核心玩法技术解析核心算法:带有物理模拟的移动和碰撞运算、简易的集群ai算法 同步方式:双端强同步、帧同步、 两端50fps 1阶段:客户端运算,服务器验证,保证可用性 2阶段:服务器运算,客户端执行,保证一致性 3阶段:为手感体验,两端分别运算,减少消息传输,抗延迟,保证流程体验性 现有版本优点:可在1500ms的延迟内流畅体验,抗外挂、流量较小 现有版本缺点:在较高网络延迟情况下卡顿、分屏处理代价较大
  • 9. 爆破星球核心玩法技术解析核心算法:基于圆形和方形碰撞的数学计算,9单位范围的碰撞检测及移动修正,炸弹也纳入碰撞计算范围,比球球的运算复杂很多 同步机制:双端实时强同步、帧同步、前端50fps、后端25fps,采用双端分别运算,服务器校验的方式 现有版本优点:1000ms延迟下流畅体验、灵敏的操作反应 现有版本缺点:服务器验证后回拉较为剧烈、因为游戏玩法决定在网络环境不稳时候而导致不同步较球球难以遮盖
  • 10. 资源加载模块技术解析机制:热更新机制、基于结对表、版本号锁定 加载流程: 1下载:www类http下载 2加载:结合版本号进行cach加载(system.io和loadfromcach) 释放流程:离开聚焦模块,优先释放特化资源,保留共用性较强资源
  • 11. UI中间层特点:工具化生成代码、内部构建控件字典、控件命名要求规范不能够重复 UI开发工作流程:美术制作资源,策划拼界面,技术实现功能 优化方案:利用CStoLua进行优化(热更新) 1 表格luatable化或sqlite 2 lua进行UI操作逻辑、业务处理逻辑替换 3 控件信息luatable化
  • 12. MsgProcess业务消息处理机制Command模式、避免重复申请或处理消息业务、节省前端的内存碎片、 消息工作流程清晰专属化
  • 13. 图片照片业务管理特点:非阻塞、灵活运用对象池策略、资源管理轻便
  • 14. 客户端语音系统解析Speex语音库 http协议请求,服务器RPC模式
  • 15. 客户端效率优化解析优化需求: 1 客户端发热,帧数50 2 圣衣动画以及骨骼 3 皮肤特效粒子和透贴片 4 语音等业务的多线程加载实时干扰 5 玩家名字合并dp
  • 16. 客户端效率优化——动画1 尽量少使用骨骼动画,利用自研的元件动画机制 2 美术规范一个父节点下属并列子节点,进行了combinemesh重新绑定uv使得网格一个圣衣为1dp 3 使用sharedmaterial,对于重复材质直接优化到1dp
  • 17. 客户端效率优化——特效1 序列帧特效禁用unity自带anim 2 序列帧使用了自研脚本修改meshUV实现,修改material的shader,使用sharedMaterial 3 具备发射机制的使用自研轻型离子发射器 4 基本运动利用脚本实现
  • 18. 客户端效率优化——其他1 减少零碎继承monobehav的脚本,主循环统一管理 2 单位碰撞运动的物理运算进行最小周围区域内进行 3 将碰撞轮询检测进行间隔时间调用 4 视野以外的gameobject关闭其脚本更新 5 消除全部和刚体物理相关的脚本或者物体 6 替换animator为传统animation 7 优化bloom为2次溶合 8 禁止运行时脚本对于顶点和多pass的shader的修改调用
  • 19. 客户端手感优化1 关闭垂直同步,以便精确控制帧数 2 利用Slerp和MoveTowards灵活处理摄像机平滑 3 手势操作区域优化 4 同步机制利用双端同时计算,客户端操作敏感度反应加快 5 避免微操作中的双手打断问题
  • 20. 球球产品线后端架构——备选征途架构结论: 不符合需求 放弃选型
  • 21. 球球产品线后端架构演化1
  • 22. 球球产品线后端架构演化2
  • 23. 球球产品线后端架构演化3
  • 24. 球球产品线后端架构演化4
  • 25. 核心玩法业务服务器中间层准备: 1 基于golang的unity全套3d和2d数学运算库开发:vector3、四元数、点差乘等 2 基于内存环状帧同步消息发射机制 3 基于圆形和方形之间的碰撞检测算法库 4 半智能集群AI算法 业务层: 1 角色系统 2 战斗系统
  • 26. 文件服务器——静态语音/相册应用:相册照片、头像照片、留言语音、签名语音
  • 27. 语音服务器——实时动态语音应用:游戏房间内对战、观战
  • 28. redisDB服务器前提:替换了mysql,因为数据关系没有复杂到大面积使用关系数据库,所以使用速度更快的redis 优点:数据备载反应快、事务复杂度符合需求 缺点:数据的永久化管理依赖设备、设备占用较高 应用: 1 存储主线业务相关数据,角色信息、段位等 2 存储关系相关数据(结合mongo) 优化设想:利用mysql或者mongo抽离游戏数据,加强永久化管理,减少设备占用
  • 29. mongoDB服务器前提:语音服务器没有使用嘟嘟语音、讯飞等sdk而是自研部署、社交的照片管理和网站相似度高、松散数据较多 优点:数量庞大的松散数据得到低成本的管理、BSON二进制数据事务的先进性 缺点:mongo维护成本较大、部署造成RPC代价大 应用:处理图片、语音、非常规业务数据存储 优化设想:对于游戏业务的一部分redis数据转mongo减少RPC业务,提供快速工具便于运维
  • 30. 大DAU服务器部署分析当前设备占用:700台服务器,运维:巨人星云 数据备载要求较高 防御性部署: 1 提高center服务器适配能力 2 防御网络拥堵性攻击 3 DB服务器消息验证,防御钓鱼性数据抓取
  • 31. 数据备载策略Redis数据备载: 1 主从机制部署 2 心跳检测、一致性检测、临界区预警 3 从机全量和增量备载相结合 4 多实例库
  • 32. 服务器性能优化——业务1 主循环帧数可以从进行被2除设置,不影响主业务运算 2 帧同步判断内存区环的发射频率和长度灵活控制 3 优化数学以及物理运算算法,减少计算开销 4 重点优化http消息以及tcp消息的动态链表规则和内容
  • 33. 服务器性能优化——流量1 基于消息结构成员字节数优化 2 发送与接收的消息业务流程优化 3 基于google的brotli算法,进行协议压缩和解压缩
  • 34. 反外挂机制1 同步时间戳 2 心跳坐标判断 3 链接路径与地址路径密钥化 4 数据库操作的严格原子性、反复性检测
  • 35. 谢谢!