内容简介:想要做好Unity性能优化,主要从CPU,内存,GPU等多方面进行,需要处理好许多事情。在脚本篇中我们就Unity API,C#,IL2CPP,Lua和算法数据结构等多方面提出了性能优化建议。鉴于Unity内设置项繁多,如果某项设置不当,就可能会对性能造成负面影响。本文将从纹理、模型、音频等多方面进行讨论,主要针对影响性能较大的设置项。
想要做好Unity性能优化,主要从CPU,内存,GPU等多方面进行,需要处理好许多事情。在脚本篇中我们就Unity API,C#,IL2CPP,Lua和算法数据结构等多方面提出了性能优化建议。鉴于Unity内设置项繁多,如果某项设置不当,就可能会对性能造成负面影响。
本文将从纹理、模型、音频等多方面进行讨论,主要针对影响性能较大的设置项。
纹理
-
Read/Write Enable
:如果你不需要运行时读取图片的像素信息的话, 禁用 ,否则启用后纹理的内存消耗会增加一倍。 -
Generate Mip Maps
:如果不是3D模型贴图,则 禁用 ,否则会多出约33%的内存开销。Mipmaps主要为远处的物件生成较为清晰的小贴图,减少渲染导致的画质损失。像UI贴图,则完全用不到。 -
Override for iOS/Android
: 启用 ,为特定平台做差异化配置。 -
Max Size
:视情况而定,默认最大贴图尺寸限制为2048,如果是特效贴图限制为512。 -
Format
: - iOS推荐使用ASTC,ASTC一般推荐
ASTC 6x6
,如果清晰度达不到需求,可以设置为ASTC 4x4
。注意:ASTC仅在iPhone 6以后的设备被支持,如果需要支持iPhone 6之前的设备,可以设置为PVRTC
。 - Android推荐使用ETC,如果是带透明通道的,可选择ETC2,注意:ETC2只在支持OpenGLES 3.0的设备获得支持,如果考虑旧设备,则可以选用ETC,然后勾选
Split Alpha Channel
。如果不带透明通道,则无脑选用ETC。 - 我们可以在预览的下方看到纹理的压缩格式和实际占用的内存大小,我们需要经常关注这项信息,以观察设置是否生效。
模型
-
Mesh Compression
:压缩比越高模型文件越小,需要根据游戏内的实际效果决定,一般可以设置为Medium
。 -
Read/Write Enable
:如果你不需要运行时修改模型的话, 禁用 ,否则启用后模型的内存消耗会增加一倍。 -
Optimize Mesh
:推荐启用,可以提升GPU性能。 -
Normals
:如果你的模型没有法线信息,将其设为None
,可以减小模型大小。
Rig
-
Animation Type
:如果你的模型没有骨骼,将其设为None
。 -
Optimize Game Objects
: 启用 ,可以将暴露在Hierarchy的子节点移除,极大的减少了模型的层级和Children数量,从而提升运行时性能。如果有挂载点需求,在Extra Transforms to Expose
里添加需要暴露的子节点即可。
Animation
-
Import Animation
:如果你的模型没有动画,将其解除勾选。 -
Anim. Compression
:推荐使用Optimal
,经过测试Optimal
比Keyframe Reduction
节省约50%的大小,从而可以提升加载速度。如果觉得动画质量太差,则可以退回到Keyframe Reduction
甚至到Off
。
Materials
如果你不需要模型内的材质,解除 Import Materials
的勾选,否则会附带一个默认的材质引用在模型里。
音频
音频的性能开销主要有两点:内存开销和CPU开销。
关于内存开销,我们可以通过最下方信息里的 Imported Size
来得知。
音频设置中影响性能最大的两个参数为 Load Type
和 Compression Format
。
其中 Load Type
有三种类型:
Decompress On Load Compressed In Memory Streaming
Compression Format
主要也可以分为三种类型:
-
PCM
:完全不压缩格式,占据的硬盘和内存相对会较大,由于运行时不需要解压,所以它的CPU开销最小。 -
ADPCM
:一种古老的压缩格式,相对于PCM
的压缩比为3.5:1
,但是运行时的解压开销很小,对于音质有一定损耗。 -
Vorbis/MP3
:常见的压缩格式,主流平台全部支持的格式,压缩比较高,但是运行时的解压缩开销较大,对于音质的损耗更加严重。在iOS平台上一般设置为MP3
,因为iOS支持MP3
格式的硬解码。
那么对于音频文件我们应该如何设置?
我的建议是:
- 对于背景音乐,采用
Compressed In Memory
+Vorbis/MP3
,因为背景音乐通常较大较长,所以内存开销就会比较大,这时候我们应该优先关注内存,同时也要使CPU开销没有Streaming
那么大。 - 对于时长较短且频繁播放的音效,比如按钮点击音效,采用
Decompress On Load
+PCM
,因为非常短的音效文件很小,所以内存开销就不那么关键,可能由于要播放多次,这时候CPU开销就很关键。 - 对于一般的音效,采用
Compressed In Memory
+ADPCM
,你需要去试听其效果,如果觉得ADPCM
失真太严重,可以将其换成PCM
。
其他
Quality Settings
-
Texture Quality
:贴图质量,可以选择Half Res
,这样速度会更快,但是贴图质量会轻微下降。 -
Shadows
:建议禁用,Unity内的影子开销很大,可以用贴图来实现粗糙的阴影,也可以自己 用Shader实现 ,影子的模型可以利用减面 工具 来减面,譬如 Simpolygon 。 -
V Sync Count
:建议设置为Don't Sync
,否则无法自行在游戏内控制帧率。有些时候在静态UI较多的界面,可以将帧率适当降低,以达到减少发热量和耗电量的目的。 -
Async Upload
:建议在Loading时,将Async Upload Time Slice
调大成4ms或者8ms,将Async Upload Buffer Size
调高到16MB,以加速资源上传。具体可以参考: 优化加载性能:了解异步上传管线AUP 。
Player Settings
-
Scripting Backend
:选IL2CPP
,IL2CPP经过几年的不断完善,已经非常稳定,转成C++代码后性能得到提升,同时也变相提供了对C#代码的混淆。 -
C++ Compiler Configuration
:默认选择Release
,如果出上线包的话,推荐改成Master
,这样虽然打包速度会慢一点,但是编译的C++代码会更加优化一些。
-
Prebake Collision Meshes
: 启用 ,用构建的时间换运行时的性能。 -
Keep Loaded Shaders Alive
: 启用 ,因为Shader的加载和解析很耗时,所以不希望Shader被卸载。 -
Managed Stripping Level
:如果项目比较简单,可以尝试High
,这样可以降低一些包大小。如果项目比较庞大,则需要酌情考虑,因为High
和Medium
可能会导致报错或者闪退。 -
Optimaze Mesh Data
: 启用 ,减少不必要的Mesh数据,降低包大小。
* 安卓有个 Blit Type
的选项,如果你的 Color Space
不是 Linear
(Linear空间会比Gamma空间开销更大,但是显示效果更好),则可以将其设为 Never
,这样可以 减少额外的一次Blit而提升性能 。
参考资料
以上所述就是小编给大家介绍的《Unity性能优化 – 设置篇》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- CentOS 6与CentOS 7 详细对比:常见设置、服务管理、性能测试
- 了解 .NET 的默认 TaskScheduler 和线程池(ThreadPool)设置,避免让 Task.Run 的性能急剧降低
- [CentOS7]redis设置开机启动,设置密码
- hadoop地址配置、内存配置、守护进程设置、环境设置
- OpenMediaVault 设置
- scrapy代理的设置
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。