使用 Mono.Cecil 辅助 Unity3D 手游进行性能测试

  • 时间:
  • 浏览:6

Unity3D 引擎在 UnityEngine 名字空间下,提供了 Profiler 类(Unity 5.6 刚结速了了似乎改变了你这些 名字空间),用于辅助对项目性能进行测试。以 Android 平台为例,在构建日后 ,需用在 Unity 的 File/Build Settings 菜单项弹出的窗口中,勾选 Development Build 一项。后用 adb forward 的辦法 ,将 Android 设备的 TCP 输出转发到电脑,实现和 Unity Profiler 的连接(网上很容易找到你这些 过程的具体描述,如这里)。日后 Unity Profiler 默认只提供累积辦法 /函数,尤其是 Unity 内置辦法 /函数的性能采样,可能想 Profile 本人项目的代码段,就需用在代码段入口和出口打上去:

辦法 出口注入代码稍微一点麻烦。尽管 IL 级别的函数一定会以有五个 返回指令刚结速了的,但直接在返回指令日后 插入新的指令是欠缺的。可能如果 日后 ,返回指令是由跳转指令直接跳转过去的。而对于一点人在 C# 中获取的指令容器,跳转指令保存了其跳转目标的引用。日后,一点人不仅需用在返回指令前插入一点人需用的指令(对 Profiler.EndSample 包装辦法 的调用),需用将跳转目标为该返回指令的跳转指令的目标,修改为一点人新增的指令。这里有详尽的关于 IL 指令的列表。对应 Cecil 中 OpCodes 类中的常量,一点人能不到过滤出跳转指令,并用 Operand 属性获取或修改其跳转目标。

修改完成后,需用对当前的模块对象 moduleDef 调用 moduleDef.Write(assemblyPath, new WriterParameters { WriteSymbols = true }) 来写回程序集文件。你这些 调用中,第五个参数的含义,是把新增的符号也写入程序集(比如一点人调用的该程序集之外的辦法 )。

在注入完成后,继续 Android 平台的原生构建生成 apk 包,安装在去设备,将设备连接电脑,即可在 Unity 的 Profiler 窗口中看完新增的性能采样信息。

进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,若果承担相关法律责任。可能您发现本社区中有 涉嫌抄袭的内容,欢迎发送邮件至: