透视宝移动端对 Unity 手机游戏引擎监控实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cloudwise
V2EX    游戏

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

  •  
  •   cloudwise 2016-09-09 10:20:16 +08:00 2534 次点击
    这是一个创建于 3321 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Unity 是近年来非常流行的游戏引擎( enine ),在当前手机游戏市场中所占份额极大,著名手机游戏 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 的不断进步,未来会有更加完善的手机游戏性能解决方案提供给大家,也希望广大游戏行业用户能踊跃反馈您的需求,让云智慧与您共同进步。
    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2911 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:45 PVG 22:45 LAX 07:45 JFK 10:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86