【Unity游戏开发】性能优化之在真机上开启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就是我的手机:

有的时候连接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'和'-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://www.cnblogs.com/msxh/p/11749405.html
请尊重别人的劳动成果,让分享成为一种美德,欢迎转载。另外,文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论!
【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑的更多相关文章
- U3D开发性能优化笔记(待增加版本.x)
http://blog.csdn.net/kaitiren/article/details/45071997 此总结由自己经验及网上收集整理优化内容 包括: .代码方面: .函数使用方面: .ui注意 ...
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
- Android 应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 【转】Android应用开发性能优化完全分析
http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...
- Android应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 【Unity游戏开发】浅谈Lua和C#中的闭包
一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...
- 转:Android应用开发性能优化完全分析
转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...
- 喵的Unity游戏开发之路 - 推球:游戏中的物理
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- 喵的Unity游戏开发之路 - 轨道摄像机
前言 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3 ...
随机推荐
- 大数据学习笔记——Java篇之网络编程基础
Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...
- 201871010119-帖佼佼《面向对象程序设计(java)》第二周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ...
- Linux系统基础知识
文件类型属性 '-'代表普通文件 'd'代表目录文件 'l'代表链接文件link 'b'代表块文件block 'c'代表字符设备文件 'p'代表管道文件
- Soc EmbeddedDesign Suite (EDS)13.1.0.162安装
1.双击SoCEDSSetup-13.1.0.162.exe弹出如下窗口: 2.点击Next,弹出License Agreement界面: 3.选择I accept the agreement,点击N ...
- hdu 1394 Minimum Inversion Number (树状数组求逆序对)
The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that ...
- 你想要的 HBase 原理都在这了
目录 一. 集群架构 集群角色 工作机制 二.存储机制 A. 存储模型 B. LSM 与 Compaction C. Region 分裂 D. 自动均衡 三.访问机制 四. 鉴权 五. 高可靠 1.集 ...
- MySql 5.7.28 安装注意事项
刚好最近用到了5.7,所以顺便整理记录一下,5.7与5.6的区别是5.7不可以使用空密码直接登录 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mys ...
- 一起学MyBatis之入门篇(2)
概述 本文主要讲解MyBatis中类型转换的功能,其实在MyBatis中,提供了默认的数据类型之间的转换,但只是基本数据类型的转换,如果跨类型进行转换,则需要自定义转换类,如java中是boolean ...
- Python文件的操作函数的使用
字符编码 二进制和字符之间的转换过程 --> 字符编码 ascii,gbk,shit,fuck 每个国家都有自己的编码方式 美国电脑内存中的编码方式为ascii ; 中国电脑内存中的编码方式为g ...
- monkey测试跑多个apk|monkey命令
1.如何跑多个apk的monkey? 黑名单:执行除了黑名单中以外的apk: 白名单:只执行在白名单中的apk. 黑名单的设置方法: a.创建一个名称为blacklist的txt文档,在文件中输入应用 ...