在Unite 2016大会上,Unity官方技术总监张黎明为大家介绍了Unity 5.x编辑器中几个非常实用的新功能。之前我们已经为大家分享了Frame Debugger,今天继续为大家分享全新的Memory Profiler。
游戏性能分析、内存分析在项目开发后期是非常关键的一步。在过去的Unity版本中,我们已经提供了功能全面的Profiler工具,比如下图就是Unity内建的Profiler。其中比较常用的是CPU Usage和Memory两个工具,可以分别分析CPU的使用情况和内存的使用情况。

085828ul7r72j2jebjt13w.png

现有的内存分析器基本可以帮助我们解决大部分的内存问题,但是它使用起来并不是很方便。首先在内存信息的显示方式上,过去的分析器还是采用了列表的方式,所以当工程非常庞大的时候,会生成一个巨长的列表,导致我们不能直观的知道每种资源占用的内存情况。另外对于游戏对象之间的引用关系,老的分析器呈现的数据也不够全面。比如下图是老的Memory Profiler显示的内存占用列表,由于列表过长这里不能完整显示全部内容。

085828c0q000ckz4z9r62c.png

为了解决这些问题,Unity在5.3.0a4版本开始提供了一套新的底层的内存分析API,并且在这基础上开发了一个新的Memory Profiler工具。目前这个工具由于还处在开发阶段,因此还没有正式发布。为了让大家第一时间体验到新工具的便利,我们把它的源代码托管到开源平台上,感兴趣的开发者也可以考虑做一些定制的工作,下面的链接就是它的源代码托管站地址(https://bitbucket.org/Unity-Technologies/memoryprofiler),另附源代码托管主页的截图。

085828nishvz265anlviag.jpg

需要注意的是这个工具的某些特性需要开启il2cpp的支持,这样才能显示全部的内存数据信息。

下面我们开始熟悉一下新工具的使用方式。首先在源代码的托管网站上,这个工具已经被打包成一个UnityPackage。像的Unity插件一样,我们需要下载这个包并把它导入到当前的游戏工程里面。完成后我们可以在Windows菜单项下找到Memory Profiler这一项。除了这一项之外还有一个MemoryProfilerInspect子菜单,因为目前还在开发阶段,所以可以不用理会。

085829gsu4zxjgoz4hgjcv.jpg

点击MemoryProfiler可以打开新的内存分析器,截图如下。

085829hnf9rnpi3bzrznrh.jpg

这时Memory Profiler窗口中还没有任何数据显示出来,你可以在游戏运行时点击Take Snapshot按钮来抓取当前渲染帧的内存数据。点击抓取之后,窗口左边会以图形化的方式显示了每种类型资源占用内存的比例,每种颜色的矩形代表了一种资源类型。从这里我们可以非常直观的看出,Mesh和Texture2D是占用内存的主要资源,其次是RenderTexture和Font。

085829y8xucz3ce8uh3eaw.jpg

现在你还可以点击任何一个彩色的矩形来显示更详细的信息。这时你可以看到每一个Texture2D对象占用的内存大小,选中的Texture2D和其他资源的引用关系可以在窗口右边显示出来。

085829r3llka4a3xkwweek.jpg

下面会是比较神奇的一步,当你把鼠标放在一个彩色矩形上面并滚动滑轮,你会发现这些彩色矩形还支持放大显示的功能。经过放大之后,你可以看到任意一个小矩形对象的内存信息。

085829hfnb2232p2pi22pi.jpg

以上就是新的Memory Profiler的基本使用方法。实际使用过程中,你可能需要观察每种资源的内存占用比例,来判断首先优化哪种资源来减少内存。另外你还可能需要观察有没有本来应该释放掉的对象仍然存在内存里面,这时你就需要观察右边的引用关系,来找到是哪一个对象引用了这个资源,导致它不能被释放。

这个新工具还有一些功能等待大家去挖掘,另外如果你对它有任何建议,都可以通过官方渠道向我们反馈。我们也很欢迎大家参与到这个工具的开发过程中,如果你对这个工具有任何改进想法,都可以申请把这个改动加入到官方的版本中。最后希望大家使用愉快。

Unity, Unity编辑器锐亚教育

锐亚教育 锐亚科技 unity unity教程