Unity文档——内存

内存

内存消耗是关键的性能指标,在内存资源有限的平台上尤为重要,例如低端移动设备。

分析内存消耗

使用Unity的Bitbucket提供的开源内存可视化工具可以最好地诊断Unity中的内存问题。集成此工具就像下载链接存储库并将包含的Editor文件夹放入项目一样简单。

从5.3开始,该工具可以与任何版本的Unity一起使用。当附加到使用IL2CPP
构建的应用程序时,它可以捕获有关本机和托管代码内存消耗的大量信息。在。

要使用该工具,只需使用IL2CPP脚本后端构建项目并将其部署到适当的设备。连接Unity的常规编辑器CPU分析器,然后打开Memory Profiler窗口(菜单:Window > MemoryProfilerWindow)并选择Take Snapshot

当数据被收集并传输到Unity编辑器时,设备上的应用程序暂停一小段时间。然后,Unity Editor暂停解析收到的数据; 这可能需要大量时间。对于内存密集型应用程序,跟踪可能需要10-30分钟才能解析。

在此解析和加载操作期间,建议耐心等待。

此屏幕截图来自标准资产
 场景
iOS上运行的
 设备,并显示超过四分之三的内存使用量可归因于四个非常大的纹理,都与飞机的机身有关。

可以缩放此可视化。单击应用程序中的每个框以查看有关它的更多信息。

识别重复的纹理

一个常见的内存问题是资产
的重复内存。由于纹理通常是项目中内存最密集的资产,因此纹理复制是Unity项目中最常见的内存问题之一。

可以通过查找两个相同类型和相同大小的对象来识别重复资产,这两个对象似乎是从同一资产加载的。在新的Memory Profiler
的详细信息窗格中,检查看似相同的对象的NameInstanceID字段。

名称字段是基于从该对象加载资源文件的名称; 通常,它是没有文件路径或扩展名的文件名。的实例id字段指示由统一运行时分配了内部标识号; 这个数字在Unity游戏的单次运行中是独一无二的(1)。

此图演示了此问题的一个简单示例。在图的左侧和右侧是从5.4 Memory Profiler的Detail窗格中截取的屏幕截图。这些屏幕截图中显示的资产是在内存中单独加载的两个纹理。纹理具有相同的名称和大小,表明它们可能是重复的。通过检查项目的“资产”文件夹,可以确定只有一个名为wood-floorboards-texture的资产文件,它非常强烈地指向资产重复。

内存中的每个UnityEngine.Object都有一个唯一的实例ID,在创建对象时分配给它。由于这两个纹理具有不同的实例ID,因此可以肯定它们代表加载到内存中的两组不同的纹理数据。

由于文件名和资产大小相同,而实例ID不同,可以肯定这两个对象表示已在内存中复制的纹理(注意:如果项目中存在具有相同文件名的纹理,则此判断不是绝对的,但在与相同文件大小相关时仍然具有强烈暗示性。)。

AssetBundles和资产复制

内存中纹理和资产重复的最常见原因是AssetBundles的卸载不正确。有关此问题的说明,请参阅Unity的AssetBundles最佳实践指南。关键部分是管理已加载资产

检查图像缓冲区,图像效果和RenderTexture内存使用情况

还可以可视化为内存可视化工具中的Image Effects和RenderTexture对象提供渲染缓冲区所需的内存。

上面的屏幕截图演示了一个简单的场景,其中应用了一些Unity的Cinematic Image Effects。Image Effects分配临时渲染缓冲区以执行其计算; 特别是,Bloom效果分配了几个减小大小的缓冲区。由于Retina iOS设备的高分辨率,这些临时缓冲区消耗的内存远远超过项目的其余部分。

考虑到iPad Air 2的渲染速度为2048x1536 - 这超出了通常针对现代游戏机和PC的1080p分辨率,但是在平板设备上运行。全屏临时渲染缓冲区消耗完整的24或36兆字节内存,具体取决于缓冲区的格式。通过将像素
减半,可将此减少75%中渲染缓冲区的尺寸。这通常不会显着降低结果的视觉质量。

优化Image Effects使用临时渲染缓冲区和其他GPU资源的一种方法是创建一个“超级”图像效果,它可以同时执行所有不同的计算。当使用Unity 5.5或更高版本时,可以使用新的UberFX(可从github软件包获得;此软件包提供可配置的“超级”图像效果,可以执行电影图像效果提供的所有操作,比单个图像的开销更少影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值