查看原文
其他

Unite 2016|Unity 5.x编辑器新功能:全新Memory Profiler

2016-05-10 张黎明 Unity官方平台
在Unite 2016大会上,Unity官方技术总监张黎明为大家介绍了Unity 5.x编辑器中几个非常实用的新功能。之前我们已经为大家分享了Frame Debugger,今天继续为大家分享全新的Memory Profiler。


游戏性能分析、内存分析在项目开发后期是非常关键的一步。在过去的Unity版本中,我们已经提供了功能全面的Profiler工具,比如下图就是Unity内建的Profiler。其中比较常用的是CPU Usage和Memory两个工具,可以分别分析CPU的使用情况和内存的使用情况。


 

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

 



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


需要注意的是这个工具的某些特性需要开启il2cpp的支持,这样才能显示全部的内存数据信息。 下面我们开始熟悉一下新工具的使用方式。首先在源代码的托管网站上,这个工具已经被打包成一个UnityPackage。像其它的Unity插件一样,我们需要下载这个包并把它导入到当前的游戏工程里面。完成后我们可以在Windows菜单项下找到Memory Profiler这一项。除了这一项之外还有一个MemoryProfilerInspect子菜单,因为目前还在开发阶段,所以可以不用理会。




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




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

 



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




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

 



以上就是新的Memory Profiler的基本使用方法。实际使用过程中,你可能需要观察每种资源的内存占用比例,来判断首先优化哪种资源来减少内存。另外你还可能需要观察有没有本来应该释放掉的对象仍然存在内存里面,这时你就需要观察右边的引用关系,来找到是哪一个对象引用了这个资源,导致它不能被释放
这个新工具还有一些功能等待大家去挖掘,另外如果你对它有任何建议,都可以通过官方渠道向我们反馈。我们也很欢迎大家参与到这个工具的开发过程中,如果你对这个工具有任何改进想法,都可以申请把这个改动加入到官方的版本中。最后希望大家使用愉快。
延展阅读

Unite 2016|Unity 5.x编辑器新功能Frame Debugger

Unite 2016|教你轻松玩转Shader

Unite 2016|VR游戏环境设计指南

Unite 2016|Asset Store流行插件之“实用小工具”

Unite 2016|Unity 5.4的GPU Instancing功能简介


我们还会分享更多Unity相关的技术教程在Unity官方中文论坛(forum.china.unity3d.com),请保持关注!






点击“阅读原文”进入Unity官方中文论坛!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存