FPS手游如何脱颖而出?看《CF手游》的性能突破之路
WeTest导读
俗话说:用户体验不谈性能就是耍流氓。 在PC游戏上的性能问题并没有那么明显, 加个内存换个CPU或者刷个主频就能轻松搞定;到了手游时代后情况则显得比较严峻,捉襟见肘的内存使得资源加载时就像如履薄冰,加上高中低不同配置的机型更加让性能问题显得很突出,一个低端机型上的卡顿就可能造成一大批用户的流失,这当然无法被忽视。
一、项目背景
《穿越火线-枪战王者》(简称:CFM)腾讯游戏在FPS移动领域的重要布局。CFM团队秉承多年来在射击游戏领域的积累,着力打造高品质的FPS手游,“手机端最爽快的射击体验”被广大玩家认可,树立了在移动FPS领域的品质标杆,在公司自有平台和外部渠道,都成功占领FPS领域最大市场份额,其中低端机玩家占比很大,研发团队为了保障用户的体验,需要持续优化客户端性能。
二、技术难点
手游客户端性能与传统app有很大区别,并且游戏玩法、技术实现的不同,游戏引擎的差别,游戏的可能出现性能问题的场景以及性能表现差别会很大。另外CFM很大一部分玩家使用的是较低配置的手机,因此性能优化显得尤为重要和艰巨。CFM采用了Unity引擎,Profiler作为Unity官方的性能采集工具,在引擎层面采集数据,数据全面、可靠,但是不能对数据保存,无法进行二次分析。
三、实现方案
(一)测试的目标
根据手游性能测试团队对腾讯游戏多年的测试经验,测试团队针对CF手游设定了以下性能指标,来检验CF的客户端性能状况。测试工具则采用公司内部运营2年的客户端性能测试工具Cube。 
(二)主要测试场景
依据CF的玩法,性能瓶颈主要会在多人PVP场景,选取游戏中不同模式下,外网玩家较多的场景进行专项测试。
①PVP-5V5-竞技模式-团队战(运输船)
②PVP-5V5-竞技模式-爆破战(新年广场)
③PVP-5V5-休闲模式-救世主(生化酒店)
④PVP-16V0-休闲模式-跳跳乐(天空之城)
⑤PVP-4V0-挑战模式-楼兰古墓(困难)
(三)发现问题情况
1、内存峰值超标
在低配置的手机上,PSS内存峰值超过警示线350MB : 
2、动画剪辑资源超标
动画剪辑资源超过15M的警示线,查看动画剪辑资源大小top20,以及每个资源的生命周期发现,SanTouLong_Boss_Born资源(boss出生纹理)从加载到场景结束一直未释放,并且资源达到了5.7MB,建议项目组进行优化。 
3、楼兰古墓流量达到6K/S以上
楼兰古墓场景,平均每秒的流量消耗达到了6.79KB,观察网络流量趋势图在标记区域中,流量持续很高,建议采取有损服务和降低不必要开销。 
4、FPS抖动严重
测试过程发现,部分低配置机型FPS波动比较剧烈,图中可以看出疑似卡顿点数量也明显上升,点击FPS曲线上的点发现,大部分卡顿点处都出现了同一个函数,沟通后发现该函数主要功能为采集UDP的丢包数、错误包数以及收发包量,建议去除该函数。 
5、组件侧问题导致FPS在部分机型下降5帧
目前大部分游戏内集合了登录、支付、加速等一些组件,这些组件常常会成为影响游戏性能的凶手。

(四)解决方案
1、去掉不合理的pool缓存,使用GPU Skinning降低SkinnedMesh的内存消耗,优化后的PSS内存趋势如下,整体下降了20MB。

2、释放不需要使用的动画剪辑资源,并且对资源进行压缩,将该场景的动画剪辑资源峰值降为12.07MB。 
3、减少不必要的通信,服务器限帧,楼兰古墓降低到3.92K/S。 
4、修改后去掉采集UDP的丢包数、错误包数以及收发包量函数,回复正常

5、组件修复后做了对比验证,FPS回归正常 
四、最终效果
项目上线前的测试阶段,手游性能测试团队累计为《穿越火线:枪战王者》审核了超过10个版本,在上线前持续优化,确保客户端性能始终如一,保障用户稳定体验。优化效果如下:
FPS均值 25→30
CPU占比率 38%→20%
纹理资源峰值 31.84M→23.04M
Mono内存 36.53M→32.04M
针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验。
目前功能还在免费开放中。,欢迎点击链接:http://wetest.qq.com/product/cube使用。
如果对使用当中有任何疑问,欢迎联系腾讯WeTest企业qq:800024531
FPS手游如何脱颖而出?看《CF手游》的性能突破之路的更多相关文章
- 手游包压缩技术引领手游行业实现app页游化
近些年,掌上游戏时代已经成为全民风尚,但身为游戏开发商考虑过手游安装包大小与用户转化率之间的关系吗? 随着手机游戏市场发展愈发壮大,行业发展愈加成熟,手游厂商愈来愈多,手游产业也进入了优胜劣汰的环节, ...
- Haskell手撸Softmax回归实现MNIST手写识别
Haskell手撸Softmax回归实现MNIST手写识别 前言 初学Haskell,看的书是Learn You a Haskell for Great Good, 才刚看到Making Our Ow ...
- 轻量级手绘软件openCanvas免费版,手绘板CG手绘软件
轻量级手绘软件openCanvas免费版,手绘板CG手绘软件 手绘软件通俗一点来说就是用手来绘画的软件,应用很宽泛如建筑,服饰陈列设计.橱窗设计.家居软装设计.空间花艺设计.美术.园林.环艺.摄影.工 ...
- 剖析手写Vue,你也可以手写一个MVVM框架
剖析手写Vue,你也可以手写一个MVVM框架# 邮箱:563995050@qq.com github: https://github.com/xiaoqiuxiong 作者:肖秋雄(eddy) 温馨提 ...
- 8月1日起全部无版号游戏下架,ios手游想上架看这里!
在苹果至中国游戏开发者的邮件中声明:如果开发者不能在7月31日前提交版号及相关文件,付费游戏将不可以在中国AppStore供应.也就是说: 从8月1日开始,苹果将正式下架全部.所有的ios付费 ...
- 我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)(二)
上一篇,多开方法,适用于一年前的版本 http://www.cnblogs.com/suanguade/p/5646776.html 前言: 一转眼一年过去了,日子越来越无聊了,于是,准备再玩一玩梦幻 ...
- 手模手配置Eslint,看懂脚手架中的Eslint
使用ESLint前:eslint是干嘛的,我这样写有什么问题,怎么还报错了,太麻烦想去掉这个插件,脚手架中关于eslint文件里的配置是什么意思?怎么设置配置项和规则达到自己想要的检测效果呢?怎么集成 ...
- 20分钟 看图手写的table
<html><body><table width="100%" border="1" cellspacing="0&qu ...
- Java开发手冊 Java学习手冊教程(MtJava开发手冊)
本文档的版权归MtJava文档小组全部,本文档及其描写叙述的内容受有关法律的版权保护,对本文档内容的不论什么形式的非法复制.泄露或散布.将导致对应的法律责任. MtJava仅仅是一个学习Java的简化 ...
随机推荐
- 序列、视图、索引(面试看这个就GO了)
oracle内置对象 序列.视图.索引 序列 create sequence aaa start with 1; 使用 视图 创建好之后 然后直接用 就OK了 有了视图可以代替子查询,使得sql简洁 ...
- java--while、do while、for三种循环体
1.for可以记录执行次数: 2.while.do while的i放在sum的后面和for得到的执行次数和结果是一致的. 1.从执行结果来看,放在前面,虽然执行次数和i放在sum的后面是相同,但是结果 ...
- VB6之HTTP服务器的实现(二)
接上篇,这次做了小小的改动和提升.增加了对POST的支持和对其他方法(GET和POST之外的)选择405回复.另外,增加了对CGI的支持,目前可以使用C语言来写(是不是好蠢的赶脚).相对于上篇,整体做 ...
- python - bilibili(四)抓包数据乱码
上一篇文章中不知道大家发现端倪木有,两张照片对比很明显发现第一张是信息很明显的,第二张是乱码的. 为什么会出现这种情况?细心的童鞋可能发现是我们发送给服务器的请求连接的数据不同: 第一张图的信息是{& ...
- Unity3D-Shader-热扭曲效果
[旧博客转移 - 2016年1月13日 13:18 ] 前面的话: 本来我是想写一个水的原理的,但是发现涉及的知识太多,还有好多不懂的,所以就先一步一步来 最近呢,我在网上捡到了一本<热扭曲秘籍 ...
- App Extensions篇之Sticker Pack Extension
转载请标明原文链接:http://www.cnblogs.com/zhanggui/p/7151795.html 前言 上一篇文章对App Extension做了简单介绍以及对Share Extens ...
- 使用C#创建Windows服务
本文属于原创,转载请注明出处,谢谢! 一.开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NET版本:.NET Framework 4.0 目标平台:X86 ...
- Android_65535问题的解决
做过比较大的项目的人都知道,当app大到一定程度的时候,会出现65535这个错误,也就是64K,也就是,一个app包中,方法数不能超过65535个,超过了就要分成多个dex包,这个别问为什么,andr ...
- Centos7 安装keepalived实现高可用
场景:尝试安装keepalived实现高可用,进而在suse环境中部署. 测试过程需要配合Nginx的相关知识:Centos7 Nginx安装 1 安装过程 问题 !!! OpenSSL is not ...
- (转)完整java开发中JDBC连接数据库代码和步骤
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...