透视宝移动端对 Unity 手机游戏引擎监控实现

2016-09-09 10:20:16 +08:00
 cloudwise
Unity 是近年来非常流行的游戏引擎( engine ),在当前手机游戏市场中所占份额极大,著名手机游戏 Temple Run(神庙逃亡)、纪念碑谷、战舰少女 R 、天天飞车等都是基于 Unity 引擎开发的。通过 Unity 可以任意创建 2D 或 3D 游戏,它可以使游戏高度优化而且优美(渲染),同时简单几步操作就能让游戏在多个平台上通用。本文将从介绍云智慧透视宝是如何实现 Unity 引擎手机游戏性能监控的。


Unity 引擎功能特色
Unity 包括很多渲染、物理、 AI 、 Audio 引擎,又集成了所需的动画、材质、物理、场景编辑器、打包发布等工具,形成一套流程化、相对完整的解决方案( solution ),这是 Unity 最大的优点。可以节省很多人力物力,同时 Unity 丰富的第三方插件市场,大大提高了开发效率。
Unity 的第二个优点是简单,傻瓜式调试和编译上手容易。就开发上来说, U3D 主要用 C#和 JS 来编写脚本,出了 bug 也容易解决。
Unity 的另一个优点是强大的扩展性,适应于多个平台,当今最火移动平台包括 iOS , Android 和 H5 的 Web 端都可以直接生成应用。比如闻名遐迩的《炉石传说》就是用 U3D 写的,然后移植到 Android 和 iOS 平台上。
U3D 跨平台原理
U3D 的跨平台主要靠的是 C++实现的,通过 mono 把 C#代码通过工具生成低可读性的中间语言,然后中间语言被进一步编译成不同平台的原生代码(基于堆栈和面向对象),比如 iOS 就对应 objectC 代码。既然如此,就转换一下思路,只要把透视宝 SDK 加入生成的 objectC 代码中,就能和其他的移动应用程序一样进行性能监控了。
透视宝 SDK 对 Unity 游戏监控原理和应用
透视宝 SDK 对 Unity 游戏监控原理就是利用了 U3D 的这个特性,通过 U3D 自带的工具把工程文件转换成了原生工程,然后利用 C++对原生接口做了一层封装。而我们的透视宝 SDK 通过支持封装后的代码,让 U3D 生成的工程直接套用透视宝即可。
接下来就是透视宝的工作了,透视宝 SDK 针对游戏性能是如何进行数据采集,又有哪些应用呢?这里主要介绍网络监控、崩溃信息( crash )收集、 H5 监控等功能。
1. 网络监控
对于大部分热门游戏来说,网络就是生命线,玩家登录、进游戏内购买、或者实时交互都需要健壮的网络。以《部落冲突:皇室战争》为例,因为游戏加入了即时策略、 MOBA 以及卡牌等多种元素,让 1v1 真人实时对决玩法迅速风靡全球,雷军等网络名人都是皇室战争的重度玩家。而对这款游戏的玩家来说,最不能接受的就是对战时游戏卡顿,哪怕是短短十秒钟的网络延迟都有可能造成战局的逆转,而登录时迟迟不能进入游戏界面,或者购买“宝石”时网络出错宝石不能及时到账,都让玩家深恶痛绝,甚至可能造成用户的大量流失。这时候,你需要透视宝 SDK 的帮助。


透视宝 SDK 功能图
透视宝 SDK 提供完善的网络监控功能,能够支持各种流行的网络库,第三方的 ASI 和 AF 、系统库 NSURLSession 和 NSURLConnection ,丰富的监控指标确保准确定位问题根源,包括网络请求的响应时间、请求类型、请求的 POST 参数、参数大小、首包时间、响应数据大小,如果请求发生错误,能准确抓取错误码、错误信息、错误类型,通过和服务端的配合能进行端到端网络性能分析。
2.崩溃信息收集
对于玩家来说,崩溃、闪退和卡顿无疑是最恶劣的游戏体验,崩溃之后是再次打开游戏还是放弃游戏,甚至卸载游戏,只是个简单的决定,毕竟游戏竞争如此激烈,找到相似甚至相同的一款游戏不要太容易。而对于开发者来说,线上环境的移动应用崩溃问题有关联因素,如果无法复现用户环境,是很难准确判断原因的,所以通过 SDK 收集崩溃日志,快速定位问题根源,是最好的解决办法。
透视宝 SDK 能够轻松实现崩溃和卡顿的监测,准确定位崩溃代码的类名、方法名、行数及崩溃类型,还能找到崩溃轨迹,最快速度发现崩溃原因并及时解决。


崩溃轨迹定位
卡顿问题同样是透视宝能够准确定位的,将系统库及 C++库解码出来进行准确定位,让程序员一看卡顿信息就能明白是什么问题导致的错误,并迅速进行解决。
3.Html5 监控
手机游戏的更新频率是非常高的,基本上可以做到每周迭代,而官方应用市场严格的审核流程大大限制了游戏的发布频率,于是免更新、易维护的 HTML5 在手机游戏中得到了广泛应用,而透视宝能够通过对 H5 性能数据的分析,能够准确发现网页加载时存在的性能问题。
比如游戏首页面耗时就是非常重要的一项性能指标,页面耗时指的是开始加载这个网页到整个页面 load 完成即渲染完成的时间,其中还包括加载链接的性能数据,如重定向时间, DNS 解析时间, TCP 链接时间, request 请求时间, response 响应时间, dom 节点解析时间, page 渲染时间等,都可以通过透视宝进行监控。


性能数据图


资源时序图
同时透视宝还能获取资源时序数据,生成资源时序图。因为每个 H5 网页都是由很多个资源组成的,包括.js 、.png 、.css 、.script 等等,这些资源的加载是按顺序进行的,页面加载时间就是这些资源加载时间所组成的,而透视宝将这些资源的加载耗时统计出来就形成了资源时序数据。
透视宝 SDK 还能找到 JS 错误,通过 JS 错误获取的是堆栈信息和错误类型;拿到页面的 ajax 请求,包括响应时间, ajax 下载时间, callback 回调时间。
4.性能监控
除了上面提到的网络、 Web 性能监控,透视宝还能进行深入到代码层的应用性能监控。以 iOS 为例, iOS 平台的原生开发语言是 Objective-C ,具有动态运行时的特点, Cocoa 框架提供了很多动态运行时接口可以对 Objective-C 接口进行 hook ,也就是方法拦截。通过方法拦截,就可以获取到方法的参数值,方法执行开始、结束的时间戳,就可以得出方法执行的性能数据。
结语:
针对 Unity 适应多个平台的特性,透视宝 SDK 选择了对每个平台分别监控的方法,充分利用 Unity 的扩展性,绕过 Unity 的源码(因为 Unity 不是开源的),实现对游戏性能的深入监控。随着透视宝 SDK 的不断进步,未来会有更加完善的手机游戏性能解决方案提供给大家,也希望广大游戏行业用户能踊跃反馈您的需求,让云智慧与您共同进步。
2220 次点击
所在节点    游戏
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/304994

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX