如今,很多年轻人以游戏来消磨时间,益智类游戏成为休闲领域中的一个重要类型。但是在打开时总会遇到一些问题,比如“启动时间太长、加载状态中、启动慢”等。这些问题会让用户瞬间降低使用感,这篇文章就针对游戏启动时长的问题进行分析解决。
一、项目背景
这是一款益智游戏。在打开游戏时会出现打不开、加载不出来等等问题。下文就以友盟+u-apm这款工具去解决以上问题。
二、所遇到的挑战
2.1 难在于发现问题
随着用户的增加,App会出现一系列的问题,就会得到越来越多的用户反馈:如,游戏打开慢、界面加载不出来等,反而会降低用户的体验感。
有上线经验的程序,应该都知道上线游戏能得到用户反馈的比例是很小的。用户反馈的两个必要条件:
喜欢你的游戏(需要你的程序)
程序存在不能忍受的问题
所以,在用户向我们反映同一种问题,或者其他系列问题时,我们一定要重视起来,针对用户反映的问题去检测,从而得到改善,使用户感受到最佳的体验感。
2.2 更难于定位问题
针对用户反馈的启动慢问题?
程序员:启动慢? 首次启动慢? 冷启动慢? 还是热启动慢啊? 什么机型? 系统什么版本?
以上这一系列问题,肯定是没有办法去问用户的。即便是问了也没有结果。因为大部分用户是不会回复的(能给反馈已经很不易了),剩下的一部分估计要反问了:什么是冷启动?什么是热启动?...
2.3 获取到解决方案
友盟+ U-APM 应用性能监控平台:(之前用过友盟+ 的统计功能,就感觉非常好用。这次又是友盟帮助解决了大问题。)
如图,可以看到U-APM为我们提供了”2.2”中程序员提出的所有问题的信息统计,感觉真的是不要太强大了。
统计信息倒是有了,可没有那么多的测试机啊,总不能先接入SDK发布一个版本,看来用户数据来校验问题是否修正吧。这种想法可真是太可怕了,光是启动慢还好,要是闪退这种直接导致程序崩溃的致命问题,肯定会伤到好多用户,那么,也就没有用户在去使用App了。不过好在U-APM还为我们提供了云真机功能。
“云真机”提供了海量Android、iOS真机,通过资源集中管理,合理调度分配,为开发者提供发版前测试、发现线上问题后复现等场景使用,助力开发者平衡成本与需求,提升研发效率。友盟+云真机搭载在U-APM应用性能监控平台上,U-APM提供了灵活地测试操作界面,支持ADB调试、WEB远程调试、扫码、抓包、虚拟定位等测试功能,并提供了测试报告供开发者后续查看。并且还推出了免费体验时长,真是贴心~
三,解决问题的步骤
3.1 接入U-AMP
接入流程如下:(每一步官方都有详细文档,这里不再赘述)
3.2 定位问题
通过接入U-AMP结合官方提供云真机,多机型多次测试后。问题确定为冷启动时间较长。
几经周折,查了很多启动慢相关文章,解决方案基本归结如下:
1.Resources管理资源:
Resources目录下面的所有资源会在ResourceManager中记录下来,而ResourceManager就是一个文件,通常是一个YAML格式的文本文件。而这个文件是会在冷启动时加载的。所以Resources目录下面的有越多的资源,那么这个ResourceManager就会越大,加载时间也会越长。
建议:使用AssetBundle的方式管理,在现在官方也推出了可寻址系统Addressable AssetSystem
2.Shader编译时长:
如果只有游戏安装之后第一次启动时间过长,一个很大的可能是Shader编译,之后游戏启动因为有了Cache,所以会快很多。这种情况的话建议查看下Always Include的Shader内容和变体。
建议:使用shadervariantcollection等方案替代。
3.纹理资源过大:
在游戏中一般是最大的资源,选择合适的压缩格式进行压缩,既可以减少内存占用,又能够加快资源的加载速度。压缩格式的选择要从显示效果和压缩率上进行权衡。
建议:一般在Android上使用ETC格式,在iOS上使用PVRTC格式,在某些情况下,可能还可以考虑使用Alpha通道分离技术进行压缩处理。
3.3 解决问题
由于原工程打包慢,所以我新建了项目,模拟还原了3.2中:Resources管理资源和纹理资源过大问题:(新建工程,在Resource文件夹中放了资源,在其他文件夹下放了比较大的纹理)
打包测试结果如下
经过减少Resource文件夹资源,和对比较大的贴图压缩后。
打包测试结果
经过对比可以看到启动时间确实是减少了,证明方案可行,可以应用到实际项目。
四,项目总结
相比于Android或者iOS原生App,Unity3D引擎开发的游戏在冷启动时间上确实比较长。但是过长的启动时间甚至损失一批用户。若没有用户反馈,可能问题一直得不到解决,很可能成为收益少的一大因素。
所以,平时开发时注重资源管理,后续就不会有类似问题。另外测试数据量,以及低端机型用户体验都是有必要作为关键测试点的。