优化笔记

unity 打包资源包含哪一些:

  • 1. resources文件下被程序应用的资源。优化方案:

    • ①对删除被引用文件内没有被用到的资源。

    • ② 尽量把需要用到同时在一起出现的纹理放在一个图集中。

  • 2. streamingAssets文件夹下面的所有资源。优化方案:

    • ① 删除不必要的资源,比如不要把安卓下的资源打包到iphone中。

    • ② 在大bundle的时候,可以考虑bundle的压缩。

把资源打成bundle对资源的影响

  • 优点:会降低包的的大小。

  • 缺点:需要花一点时间进行减压资源。

纹理格式对性能和包大小影响

  • 对没有特殊要求的图片:

  • 安卓

    • 通常使用RGBA16 ,1024*1024 资源大小和占内存都是 2M

    • 推荐使用 ETC + A  , 1024 * 1024资源大小和内存大小 1M(只有在openGL 2.0以上可以使用,因为在GPU不支持ETC时,会把压缩的图减压成原图大小及RGBA32)。

  • ios

    • 通常使用pvrtc,1024 * 1024资源大小和占内存都是1M。

  • 注意:在移动平台上一个好的压缩格式,可以减小包和咱内存的大小。假如要支持多个平台,建议对不同平台进行相应的压缩。

  • 压缩格式缺点:由于图片被压缩了,所以在一定程度会出现一点折损。有的时候会出现黑边情况。当有图有这种情况时,建议使用原图,不要压缩。

drawcall优化

  • 优化drawcall关键在于----效果,粒子,材质,pass等等。

动画的优化

  • 可以考虑最后的死亡动画和其他动画分离开来。

    • 灵活性更高,可以使用不同的材质用于死亡

    • 减少对其他脚本的维护

针对低端机优化

  • 设备不同的代支持不同功能,性能差别很大。应查询设备的代,并确定应禁用哪些功能以补偿较慢的设备

shader 优化

  • 在手游,由于对性能要求比较高,所以不建议使用SurfaceShader。因为SurfaceShader是一个比较“通用”的功能,而通用往往导致性能不高

  • 特征是在SubShader里出现CGPROGRAM和ENDCG块。(而不是出现在Pass里。因为SurfaceShader自己会编译成多个Pass。)

动画的优化

  • 使用身体遮蔽的好处是它们有助于减少内存开销,因为不活动的身体部位无需关联动画曲线。此外,不使用的曲线无需在播放过程中进行计算,这有助于减少动画的 CPU 开销。

优化内置 iOS 播放器的大小

  • 减少播放器大小的两种主要方式是更改 Xcode 中的活动生成配置 (Active Build Configuration) 以及更改 Unity 的剥离级别 (Stripping Level)

如何让发布版本尽可能的小的简单清单。

  • 最小化资源:启用 PVRTC 纹理压缩,尽可能降低其分辨率。同时,尽量减少未压缩的音频数量。点击此处,查看更多减少文件大小的提示。

  • 设置 iOS 剥离级别为使用 micro mscorlib。

  • 设置脚本调用优化级别为快速但不支持异常 (Fast but no exceptions)。

  • 切勿让代码与 System.dll 或 System.Xml.dll 产生任何关联,这些库不 与 micro mscorlib 兼容。

  • 删除不必要的代码依赖性。

  • 设置 API 兼容级别为 .Net 2.0 子集。请注意,.Net 2.0 子集与其他库的兼容性非常有限。

  • 设置目标平台 (Target Platform) 为 armv6 (OpenGL ES1.1)。

  • 切勿使用 JS 数组。

  • 避免泛型容器与结构等数值类型相结合。

注意: 但凡方便的功能,里面就必然有性能陷阱

对图集压缩时,一定要注意,图集必须是正方形,同时图集的长和宽必须是2的幂。

把200M的安装包压缩到50M安装包的方法:

  • 把所有能压缩的纹理都压缩。ios 选着使用pvrtc ,安卓使用ETC+apl 通道。

  • 把所有的大图拆成小图。

  • 把能放到资源负上的资源,都放到资源服上,进行动态加载。