《我飞刀玩得贼6》性能优化案例分享
2019.04.11 by cocos
教程 案例展示

一、抖音网红小游戏,爱的魔力转圈圈

《我飞刀玩得贼6》是北京冰狮科技有限公司旗下睡神飞工作室推出的一款创新.io 类游戏,独创的魔性飞刀大作战玩法广受玩家喜爱,在 TapTap 上有超过 100W+玩家关注这款游戏,更是一度霸占 AppStore 免费榜第一名,评分高达 4.8。奇特的是,这款游戏的成功并不归因于发行团队的营销手段,而是靠网友自发传播而走红,与游戏有关的话题“爱的魔力转圈圈”讨论数量高达 8 亿。

与其他.io 游戏不同的是,《我飞刀玩得贼6》将攻击与防御融合成一个点按动作,按住屏幕可控制飞刀移动且处于闭环状态,松开手指则飞刀朝外处于防御状态,地图上的众多障碍会限制体积大的飞刀阵的移动,触碰到障碍时,飞刀会被削减,段位提升后还有黑洞等障碍提升难度。

“贼6”是游戏界广为流传的一个梗,源自《守望先锋》的“开黑吗?我半藏玩得贼6”,后来游戏中对操作要求较高的英雄都会被套进这个梗中,形成了一种亚文化现象,抖音相关的短视频中处处充斥着对游戏魔性标题的调侃。1月22日,有抖音用户发布了一个与游戏有关的恶搞风翻唱视频,一句黑龙江口音的“爱的魔力转圈圈”很快走红抖音,成为了又一抖音神曲。两大热点加持,用户自发的爆炸式传播,加上抖音官方的推波助澜,成就了这款游戏的爆红。

二、H5 移植小游戏平台,如何做性能优化?

《我飞刀玩得贼6》拥有 H5 版本和小游戏版本。在小游戏级别的体量上,游戏同时兼备了可玩性、深度以及平衡性的考量,不过从 H5 移植到小游戏平台的过程中,工作室也不免遇到了一些技术难题,例如小游戏的性能以及 DrawCall 的优化等,Cocos 团队提供服务参与了这款游戏的性能调优过程,经冰狮科技的同意,今天同各位开发分享一下这款抖音网红小游戏具体的优化方案。

引擎版本:

Cocos Creator v2.0.9

排查原因:

通过调试引擎代码,结合项目的具体信息,Cocos 引擎工程师定位到了问题,并第一时间跟进解决。

(1)飞刀资源的 batching 被打断

原因分析:

由于飞刀的碰撞使用到了碰撞分组,碰撞分组是由节点属性 groupIndex 决定的,而引擎中的 cullingmask 也使用了 groupIndex 来作为渲染的分组标示,因此造成飞刀的渲染 batching 被打断。

问题代码:

评估的优化方案:

  • 检查飞刀逻辑,确认飞刀在玩家身上时的 groupIndex 有统一设置,从 nodepool 中获取飞刀时,飞刀的 groupIndex 有进行设置
  • 在 CCNode 中定义一个新的属性用来作为碰撞分组的标示
  • 修改 batching 的代码,在 material 为飞刀的材质时,忽略 cullingmask 的判断
  • 微信上默认关闭了 dynamicAtlas 功能,开启 dynamicAtlas,会有效减少 DrawCall,但会带来内存的增加。可以通过修改引擎 dynamicAtlas 的 insertSpriteFrame 方法,以及 CCTexture2D 的 handleLoadedTexture 方法,使得只有飞刀的资源会进入到 dynamicAtlas 中,实现小范围的动态 batching 功能,从而可以内存增长这个副作用控制在一定的范围内。

最终使用的优化方案:

由于项目进度,暂时只做了第一步,基本可以解决掉问题。2、3、4是比较极致的优化手段,并未实现,最终效果降低了 30~40 个 DrawCall。

(2)CollisionManger 的帧率默认为 60 fps,定制修改为了 30 fps,最终优化效果在低端机上可以节约 5 ms。

(3)字体优化,排行榜、击杀提示等均适用的系统字体

评估的优化方案:

  • 尽量使用 bmfont 字体,不使用系统字体
  • 开启 dynamicAtlas 功能,Label 的 CacheMode 选择为 BITMAP
  • 使用 RenderTexture 创建节点快照,将字体图标放到一个 RenderTexture 中,最终以图片的形式整体显示

最终使用的优化方案:

  • 全部字体更换为 bmfont
  • 其他方案也都是比较极致的优化手段,未实现,同时开启 dynamicAtlas 这个方案要配合飞刀的优化方案一起使用才会比较好

(4)粒子、飞刀、玩家为动态创建,影响性能。

评估的优化方案:

使用 nodepool,将所有的粒子,飞刀,玩家,全部提前创建好,整个游戏过程没有任何 prefab 的创建。

(5)Canvas 外的节点还进行渲染,影响性能以及 DrawCall,渲染效率。

评估的优化方案:

Camera 定制剔除功能,使得 Camera 外的节点不进行渲染。

最终使用的优化方案:

  • 仅剔除 Camera 外的玩家以及背景上未被拾取的飞刀
  • 玩家身上的飞刀不剔除,考虑到飞刀皮肤都一致,只占一个 DrawCall,且如果剔除的话,需要计算飞刀位置,消耗的性能也不小,权衡性能后发现得不偿失,因此没有实现。
  • 效果在对 DrawCall 比较敏感的低端机上提升较大:A57 上 fps 从 30 提升到了 45+。

经过以上几点,最终 DrawCall 从原来的 130+ 优化到了目前的 50-80 之间,在低端机例如 oppo A57 上最终游戏稳定运行在 45-55 帧。

回顾与冰狮科技的技术支持服务过程,在收到需求之后,Cocos 第一时间与冰狮科技建立了联系,在详细了解了项目情况以及游戏玩法后,针对“优化”这类原因不确切的问题提出了具体的排查方向,于此同时,冰狮科技也为 Cocos 提供了测试数据和表现。从需求建立到最终解决问题,只花了 3 天时间。

突如其来的爆火之后,也出现了不少对《我飞刀玩得贼6》苛责的声音。游戏本身的创意和基础都很扎实,然而在在细节方面仍存在进一步打磨和提升的空间,我们也很期待《我飞刀玩得贼 6》能够继续优化游戏体验,丰富游戏玩法。Cocos 引擎将继续帮助冰狮科技解决研发过程中遇到的技术难题,提升开发效率,助力游戏再创佳绩。

三、用最专业的技术,服务你出类拔萃的梦想

多年来,Cocos 引擎除了深耕底层技术,致力于为开发者打造高效、简单的游戏开发工具之外,还为开发者打造了付费技术服务,包含技术支持、企业培训和项目评估等。

  • 技术支持: 为开发团队解疑答惑,解决开发过程中遇到的技术难题,加速项目进程。
  • 企业培训: 根据企业需求,为开发人员量身打造精准的培训课程,通过面对面的技术培训,提升企业开发人员的技能水平,进而加速企业整体技术实力的提升。
  • 项目评估: 为项目提供完整的技术评估、查找效率问题。
  • VIP 服务: 为企业提供包含技术支持、企业培训、项目评估等在内的全方位服务支持,除此之外,Cocos 百万开发者用户以及丰富的线上线下推广资源,可助力企业进一步提升品牌影响力。

想要进一步了解 Cocos 企业付费支撑方案,可以联系我们噢!

联系 QQ:Cocos_Vivi  3213143729

技术问题还请移步社区交流噢!

Cocos 社区:https://forum.cocos.com/

Cocos 官网:https://www.cocos.com/

扫码体验《我飞刀玩得贼6》

冰狮科技高薪岗位正在热招中,如果你是程序、美术或策划,而且你也想加入这款“畅销游戏”的团队,快快戳这里用你的实力去刚他们吧!

Cocos 技术派 | 实时竞技小游戏技术分享

Cocos 技术派|重度小游戏《三国封魔传》技术实现方案

Cocos 技术派 |《野蛮人大作战》从开发到上线

创意小游戏专访 | 《蛇它虫》

创意小游戏专访 | 《五子大作战》

创意小游戏专访 | 《甜蜜糖果屋》

声网实时游戏语音服务已在 Cocos Creator 正式上线

Cocos 引擎正式支持百度小游戏