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 进行替换。
posted @ 2020-05-21 15:43  学习使我进步  阅读(2060)  评论(0编辑  收藏  举报