【Unity项目优化】之根据UPR资源检测报告进行项目资源优化总结

前言

有时候我们做项目的时候心里只想着一股脑的把功能开发出来,却忽略了资源优化这一块,项目开发完成了打包测试后可能会发现软件某一帧卡顿或者加载时长过长等这些影响用户体验的点。项目完成之后再进行优化有时候可能会影响到场景的一些效果,因为可能这涉及到模型,音效和UI等的改动,所以本文根据UPR检测工具AssetChecker-Win,对Unity项目进行检测得出的资源检测结果中的建议优化进行了总结。这些优化点通用性还是比较高的,希望能帮助大家在做项目的时候注意到这些资源优点,可以一边开发一边进行项目优化。如何使用UPR检测请参考这篇博文——>使用UPR资源检测工具AssetChecker-Win进行本地资源检测

项目优化前后对比

  • 优化之前
    在这里插入图片描述

  • 优化之后
    在这里插入图片描述
    根据UPR检测报告,可以很明显的看到优化之后各项数据的一个变化,评分明显达到了优以上,平均帧率也提升了一倍之多,各项资源的峰值也有所下降。有些数据标红只是因为超过了官方标准,并不影响项目运行,也说明项目需要优化的地方还有很多,优化经验都是要慢慢积累的。

根据检测结果找到目标资源进行优化

在这里插入图片描述
在这里插入图片描述
不难看出,报告里都一一罗列了AssetChecker-Win工具检测到的资源在项目中的路径。并且也给出了一些优化建议,你可以通过这些路径找到目标资源,做出相关的修改。

Unity项目资源优化总结

1、Audio音频文件优化

在这里插入图片描述

  • 启用Force to Mono

检查Inspector -> Force To Mono选项,如不需要立体声,开启forceMono可以减少内存和磁盘占用。

  • Android平台音频压缩格式

检查安卓平台的音频压缩格式——Inspector -> Android Tab -> Compression Format选项。默认平台的音频剪辑格式不适用于安卓。

  • 音频加载类型

检查Inspector -> (Platform Tab) -> Load Type选项。
default 的短音效应使用DecompressOnLoad
default的音乐应该使用Streaming。

2、FBX模型文件优化
  • 检查读/写标志
    在这里插入图片描述

查看Inspector -> Model -> Read/Write Enabled选项,开启FBX资源的读/写标志会导致双倍的内存占用。应关闭。

  • 检查动画资源压缩方式
    在这里插入图片描述

查看Inspector -> Animation Tab -> Anim. Compression选项,动画资源使用最佳压缩方式可以提高加载效率。
off:表示不采用压缩处理
keyfram Reduction:使用关键帧进行处理(旧版本unity:keyfram,reduction and compression表示关键帧减少和压缩)
Optimal:(新版本unity)自动选择一个最优的压缩方式

  • 检查FBX资源顶点数

FBX资源资源中有太多的顶点, 请检查是否必要
Custom Parameters: vertexCountLimit : 500,(顶点数一般限制为500).在满足美术效果下,尽量减少顶点数,这需要返回给美术人员修改。

  • 检查动画资源的OptimizeGameObjects选项
    在这里插入图片描述

查看Inspector -> Rig Tab -> Optimize Game Objects选项,动画资源应该勾选OptimizeGameObjects选项来减少CPU消耗。

3、Material材质球优化

在这里插入图片描述

  • 在材质中使用Standard Shader会显著增加加载耗时和ShaderLab内存大小

或许可以改成其他渲染模式。

4、Script脚本优化
  • 检查空的MonoBehavior Update方法

MonoBehavior脚本不应具有空的Update方法,检查有空方法就删掉。

  • 检查OnGUI方法

注: IMGUI是过时的UI系统,仅建议在开发调试时使用。
由于内存使用率高,不应使用OnGUI方法。

5、Texture纹理贴图优化
  • 检查纹理读/写标记
    在这里插入图片描述

检查Inspector -> Advanced -> Read/Write Enabled选项,开启纹理资源的读/写标志会导致双倍的内存占用。

  • 检查Mipmap标记
    在这里插入图片描述

检查Inspector -> Advanced -> Generate Mip Maps选项,未压缩的纹理资源启用Mipmap标志会增加内存占用
(1)、未压缩的纹理资源应该禁用mipmap。
(2)、类型为Sprite的纹理资源应当禁用mipmap。

  • 纹理资源大小2的幂次(美术修改)
    在这里插入图片描述

检查Inspector -> Advanced -> Non-Power of 2选项. 建议使用原始大小为2的幂次的贴图。大小非2的幂次的纹理资源将无法使用ETC1和PVRTC压缩格式。在导入时自动伸缩为2的幂次也可能会导致内存占用或者贴图质量问题。
所以美术作图时建议使用原始大小为2的幂次的贴图。

  • 检查纹理资源的过滤模式
    在这里插入图片描述

检查Inspector -> Filter Mode选项,纹理的过滤模式一般不建议使用Trilinear,会占用较高的计算资源。

  • 检查纹理资源alpha通道
    在这里插入图片描述

检查Inspector -> Alpha Source选项,如果纹理的alpha通道全部为0,或者全部为255,可以认为其中不包含有效信息,此时应禁用’Alpha源’标志,否则会浪费这部分的内存。

  • 检查纯色纹理

纯色纹理会浪费内存!
Custom Parameters: heightThreshold : 16widthThreshold : 16
纯色纹理的使用可能可以由一些设置来代替。由于某些情况下纯色纹理是必不可少的,此警告仅会在所使用的纹理较大(大于设定值, 默认为16x16)时才会触发。

  • 检查重复纹理

检查重复纹理,重复纹理浪费内存。

  • 检查精灵图纹理填充率

填充率是精灵图分割后的有效面积与总面积的比率,较低的精灵图纹理填充率会导致显存的浪费。
Custom Parameters: fillRateThreshold : 0.5onlyCheckSprite : True。
尝试重新编排精灵图,尽量缩小总面积以提高填充率。
sprite类型纹理填充率低于 0.5 。

  • 检查纹理是否过大

过大的纹理资源会更多的消耗内存。
Custom Parameters: sizeThresholds : 512512,10241024
纹理大于512512或者10241024均属于过大。

6、Scene场景优化
  • 检查场景未添加tag的GameObject
    在这里插入图片描述
    场景中的所有GameObject都应当添加tag

  • 检查场景中mesh collider

检查场景中所有GameObject下的Mesh Collider组件,Mesh Collider可以在场景中提供更精细化的碰撞检测,随之而来也会消耗大量计算资源,建议审慎使用。

  • 检查场景渲染设置

检查Window -> Rendering -> Lighting Settings -> Scene -> Other Settings -> Fog选项,在移动平台,建议在渲染设置中关闭对雾的渲染以节省计算资源。

  • 检查场景Animator组件中的cullingMode

场景中Animator组件的cullingMode是AlwaysAnimate会增加CPU使用率。

7、Animation动画优化
  • 检查动画曲线精度

动画曲线精度应小于5

动画曲线精度过高会增加动画占用内存; 此规则仅面向以文本格式序列化的*.anim文件中的浮点精度
Custom Parameters: precision : 5
用文本编辑器打开.anim动画文件,修改m_EditorCurves::curve::m_Curve下的float值的精度。建议用脚本直接将此文件中所有float精度都调小。

8、Shader优化
  • 检查Shader中纹理数量

Shader中过多的纹理可能会增加GPU消耗
Custom Parameters: textureCountLimit : 3
Shader中的纹理个数应小于3

9、EditorSetting编辑器设置优化
  • 检查GraphicsJobs设置
    检查Editor -> Project Settings -> PlayerSettings -> Graphic Jobs(Experimental)*的设置,这项设置会为图形任务开启多线程. 但这个是实验性质的, 会引起新的问题. 请自行测试。
    尝试开启graphicJobs并测试
  • 检查BakeCollisionMeshes设置

检查Editor -> Project Settings -> PlayerSettings -> PreBake Collision Meshes的设置,这项设置可以减少加载/初始化的时间, 虽然会增加一些构建时间和包体积。
如果在项目中启用了physics, 可以考虑开启Prebake Collision Meshes选项

  • 检查StripEngineCode设置

检查Editor -> Project Settings -> PlayerSettings -> Strip Engine Code的设置,关闭StripEngineCode会增加包体积。

  • 检查Physics中的AutoSyncTransforms设置

检查Editor -> Project Settings -> Physics -> Auto Sync Transforms的设置,AutoSyncTransforms选项是为了兼容老版本的Unity而设立的, 会增加CPU的使用

  • 检查Physics2D中的AutoSyncTransforms设置

检查Editor -> Project Settings -> Physics2D -> Auto Sync Transforms的设置,AutoSyncTransforms选项是为了兼容老版本的Unity而设立的, 会增加CPU的使用。

  • 检查Physics2D中LayerCollisionMatrix设置

检查Editor -> Project Settings -> Physics2D -> Layer Collision Matrix的设置,在Physics2D设置中LayerCollisionMatrix中的格子不应该都勾选上,这会增加CPU的负担, 应该取消勾选那些没有必要的格子。

  • 检查Android的ManagedStrippingLevel设置

检查Editor -> Project Settings -> PlayerSettings -> Managed Stripping Level的设置,这会增加包体积。
Android设置中的ManagedStrippingLevel选项应为Medium或者High

关于UPR检测报告优化建议

在这里插入图片描述

我咨询过这个UPR检测工具的开发人员,他说检测报告上的优化建议其实他们根据国外unity专家现场报告得出来的,所以仅供参考使用,但是参考价值还是很高的。unity项目优化就是从这些资源细节出发,一点点优化,做到不忽略每个细节。untiy项目优化细节还是很多的,优化经验也是一点点积累的,继续学习吧。

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周周的Unity小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值