Unity3D性能优化之资源导入标准和属性设置篇
-
一、Unity使用的资源
1、外部资源:
不是Unity创建,而是外部工具做的模型以及贴图或通用的格式资源。例如图片资源、模型资源、动画资源、视频和声音资源。
2、内部资源:
Unity创建的,并且只有放在Unity才能识别。例如脚本、Shader、场景、预设、材质、精灵、动画控制器、时间线、物理材质等。
-
二、Unity资源导入标准
1、纹理
- 关闭Read/Write 选项的:Read/Write Enabel 选项启用后, 选择这个选项将会允许从脚本来访问纹理数据, 开启此
选项后, 将会产生纹理数据的副本, 副本会占用内存, 等同于一个纹理数据会有双倍的内
存消耗。 - 纹理按照平台压缩格式:RGB32和RGB24等非压缩格式纹理占用内存较大。带有OpenGLES3或更高版本的Android的纹理格式应该是astc。另外Android按ETC2,IOS按PVRTC,PC按DXT5
- 过滤模式Filter Mode设置为 Bilinear的纹理:Trilinear 三线性过滤(三线性插值) , 纹理会在不同的 mip 水平之间进行模糊 , 从而增
加 GPU 开销。 - Sprite纹理关闭Mipmap:Mipmap 开启后, 内存会是未开启 Mipmap 的 1.33 倍, 因为 Mipmap 会生成一组长宽依
次减少一倍的纹理序列, 一直生成到 1*1。Mipmap 提升 GPU 效率; 一般用于 3D 场景或角色, UI 不建议开启。UI用的纹理关闭,3D模型和场景用到的纹理开启。 - Wrap 模式设置为 Clamp:Wrapmode 使用了 Repeat 模式, 容易导致贴图边缘出现杂色
2、模型
- 关闭Read/Write 选项:Read/Write Enabel 选项启用后, 选择这个选项将会允许从脚本来访问网格数据,开启此选项后,将会产生网格数据的副本,副本会占用内存,等同于一个网格数据会有更多的内存消耗。一个用于呈现,一个用于系统内存中的脚本访问(如果要进行代码操作动态合批,就是开启这个选项)
- Mesh Compression选项:设置为High
- 开启 OptimizeMesh 选项:对于模型相关, 开启后, Unity 会对其进行网格优化, 提高。
- Tangent 切线属性:无必要不导入
- Normal 法线属性:无必要不导入
- Color 属性:(顶点色)无必要不导入
- UV2 属性:常规情况只会用到 UV1, UV2 一般不会用到,无必要不导入
3、音频
- 长音频的Load Type用Streaming加载:Streaming 选项开启后, 音频加载方式变为边播放边读取,能明显降低内存,背景音乐使用这种方式。
4、组件
- Animator 组件开启 OptimizeGameObjects:OptimizeGameObject 可以有效降低动画开销
- SkinnedMeshRenderer:不开启MotionVector,启用Skinned Motion Vectors将以消耗双倍内存为代价提高蒙皮网格的精度
- 不可见的 Image 组件:alpha=0 的 Image 组件依然会参与渲染,需要去掉
- 不可见的 RawImage 组件:alpha=0 的 RawImage 组件依然会参与渲染,需要去掉
- 使用了 Outline 组件:使用 Outline 效果会增加 4 倍的顶点数, 造成较高的重建开销, 可用 shadow 替代。
5、脚本资源
- OnGUI 方法:OnGUI 方法会造成较多的堆内存分配, 耗时也较高, 不建议使用。
- 空的 Update 方法:空 Update 方法在运行依然会被调用, 导致额外的开销, 建议去除。
- 存在.tag 的调用:.tag 的使用会导致堆内存分配, 建议使用 CompareTag 进行替换。
转载请声明出处:https://www.cnblogs.com/wwhhgg/