Unity性能优化_包体

这里讨论的减小包体大小,又因为很多项目会采用基础包与资源下载包分离的策略,所以减少基础安装包(首包)的尺寸大小是最头等的诉求,特别是以 WebGL 为目标进行发布时,必须保持较低的构建大小,让用户在内容启动之前等待合理的下载时间。

先说说代码的优化策略:代码精简,主要指导思想就是剔除运行时不必要的库(包括Shader)。

代码

1 Strip Engine Code

2 Striping Level

  • 需要测试,看项目复杂度,当然Minimal最保险(use micro mscorlib)
  • 考虑:Don’t use anything that lives in System.dll or System.Xml.dll in your code. These libraries are not compatible with micro mscorlib.

3 精简Package

  • Build-In package
    • 源码层很多模块之间是有依赖的,定制引擎的性价比不高
    • 但是仍然可以减小C#侧的DLL,但比如音频功能,源码层并没有彻底删除C++代码
    • 常见可以排除的有XR/VR,Ai,Terrain,Analytics等
  • 3rd package,毫无疑问清楚未使用的,和选择更轻量的库
    • 选择Mono编译器;如果强制64位,则Mono64(需重编译Mono),或选择IL2CPP
    • 设置API兼容等级为.NET Standard 2.1(.net2.0 subset)
    •  减少支持的CPU目标平台架构
    • 避免将泛型容器与值类型(包括结构体)组合使用,而且对GC不友好。Avoid generic containers in combination with value types, including structs.
    • 确保使用Release编译

美术资源

是大头,其中又以贴图为尤。

1 艺术资源类型与压缩

  • 3D模型
    • Mesh:比如顶点数量过多,存在冗余的多套UV等
    • 材质
    • 贴图
    • 动画复杂度控制
  • 动画文件尺寸优化
    • Animation.Compression建议开启,去掉多余的关键帧。
  •  贴图
    • 精度
    • 压缩格式:Android(ETC1/ETC2)iOS(PVRT)
    • 图集
    • 拼接
    • 九宫格
  •  音频:推荐设置
    • IOS平台使⽤MP3格式,Android平台使⽤Vorbis格式
    •  较⻓的背景⾳乐⽤Streaming
    • 移动平台通常不需要⽴体声,Force to Mono改成单声道
    • 最⾼采样率控制在22KHZ

2 无效资源

工程迭代的必然结果,必须清理。

3 资源引用关系

可导致打包重复拷贝,必须建立清晰的资源管理规则。

一些工具

资源分离

分离资源,Resource和StreamingAssets目录保持尽可能少的内容,待基础包安装之后以按需下载的方式进行。基础下载包与更新机制的分包策略,并不减小总量

  • 特别是Resource目录,副作用还包括增加应用启动时间(在程序启动时建立索引,复杂度是线性的)Scalability不是很好,只适合放一些配置文件
  • StreamingAssets目录的资源不会进行压缩

Auto Streaming

优化了首包大小和更新包大小,对包体,Mesh,纹理,动画,音频,等资源皆有效

特别对于未做基础包+资源包策略的应用来说,体验提升的更为明显

默认的应用以低精度资源运行,Streaming机制会自动在后台下载相应的高精度资源进行替换,从表现上看会有一个类似从模糊到清晰的过程

其他

BuildSetting里面的Scene保持只有一个

参考