Profiler窗口
Unity Profiler窗口可帮助您优化游戏。它会为您报告在游戏的各个区域花了多少时间。例如,它可以报告渲染,动画或游戏逻辑所花时间的百分比。
您可以在编辑器中使用性能分析功能来玩游戏,并且会记录性能数据。 Profiler窗口随后在时间轴中显示数据,以便您可以看到比其他帧更快的帧(或更多时间)。通过点击时间线中的任何位置,Profiler窗口的底部将显示所选帧的详细信息。
请注意,性能分析必须测试您的代码。这种仪器对游戏的性能影响很小。通常这个开销足够小,不会影响游戏帧率。在使用分析时,通常只考虑在特定区域花费的时间比例(或百分比)。此外,为了提高性能,重点放在消耗最多时间的游戏部分。比较代码更改前后的分析结果并确定您测量的改进。有时您为改善性能所做的更改可能会对帧速率产生负面影响;代码优化的意外后果应该是可以预料的。
iOS远程调试
通过执行以下步骤可以在iOS设备上启用远程配置文件:
1.将您的iOS设备连接到您的WiFi网络(探查器使用本地/ adhoc WiFi网络将设备的性能分析数据发送到Unity Editor)。
2.在Unity的构建设置对话框中选中“Autoconnect Profiler”复选框。
3.通过数据线将设备连接到Mac,在Unity的构建设置对话框中选中“Development Build”复选框,然后在Unity Editor中点击“Build&Run”。
4.当应用在Unity编辑器(Window-> Profiler)中的设备打开分析器窗口上启动时。
5.如果您使用防火墙,则需要确保端口54998到55511在防火墙的出站规则中处于打开状态 - 这些是Unity用于远程分析的端口。
注意:有时Unity编辑器可能不会自动连接到设备。 在这种情况下,可通过选择适当的设备从Profiler Window Active Profiler下拉菜单启动Profiler连接。
Android远程调试
可以通过两种不同的路径在Android设备上启用远程配置文件:WiFi或ADB。
- 对于WiFi分析,请按照下列步骤操作:
1.请务必在您的Android设备上停用移动数据。
2.将您的Android设备连接到您的WiFi网络。
3.通过数据线将设备连接到Mac / PC上,在Unity的构建设置对话框中选中“开发构建”和“Autoconnect Profiler”复选框,然后在Unity编辑器中点击“构建和运行”。
4.当应用在设备上启动时,在Unity编辑器(Window-> Profiler)中打开Profiler窗口,
5.如果Unity Editor无法自动连接到设备,请从Profiler Window Active Profiler下拉菜单中选择适当的设备。
注意:Android设备和主机(运行Unity Editor)必须位于同一子网上才能使设备检测正常工作。
- 对于ADB分析,请按照下列步骤操作:
1.通过电缆将设备连接到Mac / PC,并确保ADB识别该设备(即,它显示在adb设备列表中)。
2.检查Unity的构建设置对话框中的“Development Build”复选框,然后点击“Build&Run”。
3.当应用在设备上启动时,在Unity编辑器(Window-> Profiler)中打开Profiler窗口,
4.从Profiler Window Active Profiler下拉菜单中选择AndroidProfiler(ADB@127.0.0.1:54999)。
注意:当您按下“Build&Run”时,Unity编辑器会自动为您的应用程序创建一个adb隧道。如果你想分析另一个应用程序,或者你重新启动adb服务器,你必须手动设置这个隧道。为此,请打开终端窗口/ CMD提示并输入:adb forward tcp:54999 localabstract:Unity-{insert bundle identifier here}
Profiler 窗口
连接到Unity players
要分析在另一台计算机上运行的其他设备或播放器上运行的游戏,可以将编辑器连接到另一台播放器。 下拉Active Profiler将显示在本地网络上运行的所有玩家。 这些玩家通过玩家类型和运行玩家“iPhonePlayer(Toms iPhone)”的主机名来识别。 为了能够连接到播放器,必须使用Build Settings对话框中的Development Build复选框启动播放器。 从这里也可以勾选复选框以启动编辑器和播放器自动连接。-
Profiler控件
Profiler控件位于窗口顶部的工具栏中。使用这些来打开和关闭配置文件,浏览配置文件框架等等。运输控件位于工具栏的最右端。请注意,当游戏运行并且分析器正在收集数据时,单击这些传输控件中的任何一个都会暂停游戏。控件进入第一个记录帧,第一帧返回,第一帧前进并分别转到最后一帧。分析器不保留所有记录的帧,所以第一帧的概念应该是尽管仍然保留在内存中的最旧帧。 “当前”传输按钮使配置文件统计窗口显示实时收集的数据。 Active Profiler弹出式菜单允许您选择是在编辑器还是单独的播放器(例如,在连接的iOS设备上运行的游戏)中进行分析。
深度剖析
当您打开Deep Profile时,所有的脚本代码都将被分析 - 即所有的函数调用都被记录下来。这对了解在游戏代码中花费的时间非常有用。
请注意,深度剖析会产生非常大的开销并使用大量内存,因此在分析时,您的游戏运行速度会明显变慢。如果您使用复杂的脚本代码,则可能根本无法进行深度剖析。对于使用简单脚本的小型游戏,深度剖析应该足够快。如果您发现整个游戏的深度剖析导致帧速率下降到游戏刚刚运行的程度,则应考虑不使用此方法,而应使用下述方法。当您设计游戏并决定如何最好地实现关键功能时,您可能会发现深层剖析更有帮助。请注意,对于大型游戏,深度剖析可能会导致Unity耗尽内存,因此可能无法进行深度剖析。
手动分析脚本代码块的开销比使用深度分析的开销小。使用Profiler.BeginSample和Profiler.EndSample脚本函数来启用和禁用代码段的分析。
查看SyncTime
当以固定帧率运行或与垂直空白同步运行时,Unity会在“等待目标FPS”中记录等待时间。默认情况下,这个时间量不会显示在探查器中。要查看等待的时间,可以切换“查看SyncTime”。这也是在丢失帧之前你有多少空间的一个衡量标准。
-
Profiler 时间线
Profiler窗口的上半部分随时间显示性能数据。当您运行游戏时,数据会被记录在每一帧中,并显示最近几百帧的历史记录。点击一个特定的框架将在窗口的下半部分显示其详细信息。根据当前选择的时间轴区域显示不同的细节。
时间轴的垂直比例是自动管理的,并会尝试填充窗口的垂直空间。请注意,要详细了解CPU使用情况区域,您可以删除“内存”和“渲染”区域。另外,可以选择时间轴和统计区域之间的分离器并向下拖动以增加用于时间轴图表的屏幕区域。
时间轴由几个区域组成:CPU使用率,渲染和内存。点击面板上的关闭按钮可以删除这些区域,然后使用配置文件控制栏中的添加区域下拉菜单重新添加。
请注意,标签区域中的彩色方块可以控制是否显示相关的时间线。要从显示屏上移除样品,请点击颜色键。密钥将变暗,数据将从图中删除。例如,这对于确定CPU图形中尖峰的原因很有用。
根据Profiler进行性能优化
一、cpu占用分析
可以看出在白色竖线定位的那一帧,Game.Update()占用了88.3%,如果想知道脚本具体调用堆栈,和具体的问题出在哪,需要把Deep Profiler选上进行深度分析,当你打开深度分析(Deep Profile),所有脚本代码将被分析 - 也就是说,所有的函数调用被记录。知道确切在你的游戏代码中花费的时间,这是有用的。如下图
二、内存占用分析
在Memory栏,可以定位到某一帧,可以看到该帧时内存使用情况,一般就是图片占用内存了,这只是内存概况,要想知道具体是那个图片占用了内存,需要选择Detailed
找到了是哪个图片占用内存了,就好办了,开内存优化。
三、内存优化
从profiler上可以清楚的看到哪个图片占用多少内存,下面就要找到这些图片,根据实际情况对图片进行优化,比如压缩图片,一般来说,如果不是对图片显示要求太高,图片都可以进行一定程度的压缩。选中图片,有一个Max Size,它是限制图片的最大尺寸,这个数值一般可以调整到图片实际尺寸的一般,例如一张1028*720的图片,压缩前内存大小为3.5MB,Max Size可以设置为1024,大小变为2.3MB,基本上都可以接受,甚至Max Size可以设置为512,再甚至可以进行压缩,大小就会变为144KB。所以根据你的项目的实际情况,做一些可以接受的大小调整和压缩,优化效果会非常明显。包大小也会减小很多。
另外还有,去掉Generate Mip Maps选项前面的勾
项目优化是一个细活,还是要多多尝试,调整。
四、包大小优化
build以后,在Console面板最上边点右键->Open Editor Log,打开日志文件,在最下面找到打包记录,它记录了你都把什么东西打包进去了。这样也方便你有针对性的优化资源。