【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑

摘要:
现在进入正题,让我们来谈谈如何在真正的机器上打开DeepProfile模式和一些坑。然而,通过在编辑器中打开DeepProfile模式收集的数据通常是不准确的。通常,我们需要在真实机器上打开DeepProfile模式来收集数据。但在实际操作过程中,马三多次尝试,包括重启Unity、重新打包、重新安装手机包等一系列操作,但都无法在Android上打开DeepProfile模式。

一、引子

  最近马三入职了新公司,平时除了负责编辑器开发之外还要做一些游戏性能优化方面的工作。在这里首先给大家安利一下Unity官方的性能测试分析工具URP ,这个工具目前是免费,测试的过程中也不需要接入任何SDK,测试完成以后还可以生成一份性能测试报告。当然,相比侑虎科技的UWA GOT工具来讲,目前UPR功能还是比较少的,不过在项目初期完全可以先使用UPR做一些性能优化工作。好了言归正传,我们今天说说如何在真机上开启DeepProfile模式以及一些坑。

二、在真机上开启DeepProfile

  众所周知,使用Unity Profiler开启DeepProfile模式以后,可以看到很多函数的具体消耗和GC情况,包括调用栈这些信息,有了这些信息再对症下药的话优化的效果是很明显的。但是在Editor下开启DeepProfile模式采集到的的数据通常是不准确的,一般我们要在真机上开启DeepProfile模式采集数据。

  首先要确保我们本地已经有了 adb 工具,一般在下载AndroidStudio或者Android SDK的时候,这个东西已经包含了,相对路径在:AndroidSDK/platform-tools/ 目录下,将它配置到环境变量以后就可以直接在命令行执行 adb 命令了。如果还没有搭建Android环境的话可以到这里下载:https://www.androiddevtools.cn/  如果感觉搭建环境比较麻烦的话,也可以直接下载一个简单的adb工具,传送门页面也有单独的 adb 工具下载,才2MB很轻便。

  然后将我们的手机开启开发者模式、开启允许adb调试与安装程序,之后再用数据线与电脑连接,然后执行下面的命令查看手机是否与电脑连接成功:

adb devices

  如果成功的话可以看到我们的手机设备了,如下图所示,VBJ4C18423012974就是我的手机:

  【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑第1张

   有的时候连接adb会连接不上,我们可以重启adb server试试:

adb kill-server  #关闭 adb server
adb start-server  #开发adb server
adb devices  #查看连接成功的设备

  接着我们还需要对Unity打包设置做一些调整:

  • 配置BuildPlayerSetting,勾选Development Build,这个是必选,否则无法开启调试。另外AutoConnectProfiler这个也需要勾选。然后就正常打包并安装到Android手机上
  • 安装好以后不要手动打开游戏,要通过命令行启动我们的游戏。具体命令是:
    adb shell am start -n com.xxx.xxx/com.unity3d.player.UnityPlayerActivity -e 'unity' '-deepprofiling'

    “/”前面的是你自己项目的包名,“/”后面的代表的是具体的启动Activity的名称,如果你的项目没有改动,使用的是默认的Activity的话,那么直接使用“com.unity3d.player.UnityPlayerActivity”,如果有在AndroidManifest中修改过启动的Activity的话,要换成自己的Activity才可以,比如:“com.msxher.MainActivity”这种

  • 通过命令行拉起游戏以后,还需要将手机连接到Unity的指定端口上面,这样Profiler才能接收到数据,具体命令是:
    adb forward tcp:55000 localabstract:Unity-com.xxx.xxx

    "Unity-"后面跟着你的包名就可以了,如果55000端口不好使的话可以试试4600、34999等端口

  • 此时我们打开Unity中的Profiler窗口,然后选择<Enter IP>这个选项,在里面输入 127.0.0.1 ,如果没有出错的话,就可以连接上我们的手机了,并且可以在窗口中看到各项的数据了。注意不要输入端口号,直接输入 127.0.0.1 这个IP就可以。【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑第2张

  有几个注意事项:

  • 'unity'和'-deepprofiling'之间要有空格
  • 游戏要让命令来启动,不要自己启动,否则会有一个警告,说此Activity已经存在
  • 生成APK的Unity版本与用来开启Profiler的Unity版本必须是同一个
  • 如果自己已经手动启动了unity,则需要使用命令行重新拉起一遍游戏

  按理说如果没有问题的话,此时就可以进行DeepProfile了我们的游戏了,网上很多教程也写到这里就结束了。但是马三在实际操作的过程中,重复试了很多遍,包括重启Unity、重新打包、重新安装手机包等一系列的操作,都是不能在Android上开启DeepProfile模式。马三甚至一度以为是因为DeepProfile模式比较消耗性能,因此Unity在移动平台上禁用了它。直到后来马三把相关的官方文档从头到尾认认真真读了一遍,才发现问题所在,下面就说说这个坑。

三、踩坑

    马三经过阅读官方文档,发现只有在Mono的包上面才能开启deepProfile,而我们的包一直是使用il2cpp的方式进行打包的,因此无论怎样尝试都是不能开启DeepProfile的。后来打了一个Mono的包,果然就可以开启DeepProfile了,各种函数消耗和GC看得清清楚楚。相关官方文档的传送门,建议大家有时间的话仔细阅读一下。

  【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑第3张

四、总结

  在本篇博客中,马三跟大家一起学习了如何在真机上开启Unity Profiler的DeepProfile模式,并且踩了坑:“只有在以Mono的方式打包的apk上才能开启DeepProfile”,在il2cpp包上是不能开启DeepProfile的。看来遇到问题还是要多多阅读官方文档,毕竟官方文档是最权威、最一手的资料。

如果觉得本篇博客对您有帮助,可以扫码小小地鼓励下马三,马三会写出更多的好文章,支持微信和支付宝哟!

 【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑第4张      【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑第5张

作者:马三小伙儿
出处:https://www.cnblogs.com/msxh/p/11749405.html 
请尊重别人的劳动成果,让分享成为一种美德,欢迎转载。另外,文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论!

免责声明:文章转载自《【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ipconfig详解一步步搭建tensorflow环境(最简单最详细)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

嵌套For循环性能优化案例

1 案例描述 某日,在JavaEye上看到一道面试题,题目是这样的:请对以下的代码进行优化 Java代码   for (int i = 0; i < 1000; i++)       for (int j = 0; j < 100; j++)           for (int k = 0; k < 10; k++)       ...

Java内存优化和性能优化的几点建议

1.没有必要时请不用使用静态变量     使用Java的开发者都知道,当某个对象被定义为stataic变量所引用,这个对象所占有的内存将不会被回收。有时,开发者会将经常调用的对象或者变量定义为static,以便提高程序的运行性能。因此,不是常用到的对象或者变量,不要定义为static类型的变量,尤其是静态类对象的定义,一定要仔细考虑是否有必要。例如  ...

Unity3D中的常用方法

  备注:文中所使用的this均指脚本所依附的对象 1.移动(用Translate方法进行移动) int moveSpeed = 10; //移动速度 this.transform.Translate(Vector3.down * Time.deltaTime * moveSpeed); 2. 修改Sprite Renderer的sprite public...

将Flash的Sprite导入Unity(解释说明版)

usingUnityEngine; usingUnityEditor; usingSystem.IO; usingSystem.Xml; usingSystem.Reflection; public classAutoSliceSpriteSheetWithXML : AssetPostprocessor { private voidOnPr...

Unity小知识点大全(一)

原帖地址:https://zhuanlan.zhihu.com/p/54763553 1. 高亮选择 在Scene面板右上角的Gizmo下拉列表中,可以通过设置Selection Outline选项决定是否在选中物体时显示边缘高亮的标识。 2.Pixel Perfect Camera 在摄像机上挂载Pixel Perfect Camera组件能够使2D像...

在Unity中使用Lua脚本

前言:为什么要用Lua首先要说,所有编程语言里面,我最喜欢的还是C#,VisualStudio+C#,只能说太舒服了。所以说,为什么非要在unity里面用Lua呢?可能主要是闲的蛋疼。。。。。另外还有一些次要原因:方便做功能的热更新;Lua语言的深度和广度都不大,易学易用,可以降低项目成本。C#与Lua互相调用的方案坦白来将,我并没有对现在C#与Lua互相...