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

2019-10-29 21:42:03 浏览数 (1)

一、引子

  最近马三入职了新公司,平时除了负责编辑器开发之外还要做一些游戏性能优化方面的工作。我们今天说说如何在真机上开启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调试与安装程序,之后再用数据线与电脑连接,然后执行下面的命令查看手机是否与电脑连接成功:

代码语言:javascript复制
adb devices

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

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

代码语言:javascript复制
adb kill-server  #关闭 adb server
adb start-server  #开发adb server
adb devices  #查看连接成功的设备

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

  • 配置BuildPlayerSetting,勾选Development Build,这个是必选,否则无法开启调试。另外AutoConnectProfiler这个也需要勾选。然后就正常打包并安装到Android手机上
  • 安装好以后不要手动打开游戏,要通过命令行启动我们的游戏。具体命令是: “/”前面的是你自己项目的包名,“/”后面的代表的是具体的启动Activity的名称,如果你的项目没有改动,使用的是默认的Activity的话,那么直接使用“com.unity3d.player.UnityPlayerActivity”,如果有在AndroidManifest中修改过启动的Activity的话,要换成自己的Activity才可以,比如:“com.msxher.MainActivity”这种
代码语言:javascript复制
adb shell am start -n com.xxx.xxx/com.unity3d.player.UnityPlayerActivity -e 'unity' '-deepprofiling'
  • 通过命令行拉起游戏以后,还需要将手机连接到Unity的指定端口上面,这样Profiler才能接收到数据,具体命令是: "Unity-"后面跟着你的包名就可以了,如果55000端口不好使的话可以试试4600、34999等端口
代码语言:javascript复制
adb forward tcp:55000 localabstract:Unity-com.xxx.xxx
  • 此时我们打开Unity中的Profiler窗口,然后选择<Enter IP>这个选项,在里面输入 127.0.0.1 ,如果没有出错的话,就可以连接上我们的手机了,并且可以在窗口中看到各项的数据了。注意不要输入端口号,直接输入 127.0.0.1 这个IP就可以。

  有几个注意事项:

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

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

三、踩坑

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

四、总结

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

作者:马三小伙儿

出处:https://cloud.tencent.com/developer/article/1529722

0 人点赞