Unity游戏客户端内存控制经验list

目前厂商们比较统一的认可标准是内存控制在300M左右。内存控制关系到整个程序架构的设计和很多细节的调整和优化。

1. 贴图的多次加载

1.1 在加载贴图方式进行优化,一个贴图只加载一份,把多个prefab引用的贴图进行预先加载(这样这个贴图在内存中就会只占一份内存)
1.2 在上述情况下,静态创建(场景的一部分)的东西还是会多占一份内存,贴图的使用上要分开
1.3 游戏一启动就引用的资源会被加载两份(原因未知)

2. 贴图的压缩

2.1 尽量对贴图进行压缩。保证是标准尺寸,才可以压缩
2.2 因为ios对压缩的支持有限,要把贴图分为方形icon和背景图类(4bits压缩),icon类(16bit压缩)、渐变色强的icon类(不压缩或者压缩尺寸)
2.3 尺寸和压缩方式细调
2.4 贴图排列工具在图集中自动排列图元,采用排料算法

3. 音效的加载方式

3.1 在内存中以压缩方式存储,大大降低audiomanger
3.2 进行适当质量的降低
3.3 音效设置为单通道,分别使用mp3,ogg格式

4. 动态加卸载所有资源、合理分ab包

4.1 按卡牌划分卡牌相关prefab的ab打包(贴图、模型、动作、音效;每个卡牌打为一个ab)、卡牌的图标独立打为一个包(图标使用频率更频繁)
4.2 按技能划分技能相关prefab的ab打包
4.3 UI的prefab按界面分类打ab包
4.4 从ab创建资源后,ab实际是没有卸载的,但是ab内的东西并没有保证完全创建完成,暂时没有做完全的卸载
4.5 需要预先加载的common包内是一些动态使用的资源,无法靠ab包依赖关系加载

5. 对内存中的资源进行定期清理

5.1 随着游戏的进行,内存中的东西会越来越多,可以在切换场景时,进行对资源的清空处理
5.2 保证lua程序中的数据在合适的时机清除

6. 阴影贴图尺寸问题

在场景中找到会产生投影的灯,设置它使用QualitySetting的Resolution,然后Resolution设置到一个合理的尺寸

7. 字体文件问题

使用的字体库文件只保留常用字

8. Android不支持部分压缩格式如DXT

如果选了DXT格式,在Android手机上图片是原尺寸的

9. 模型适当压缩,动作尽量压缩
10. 对mipmap进行适当的开关,UI一般关闭,模型打开。

mipmaps渲染模式可以查看mipmap的使用情况

11. 贴图不要打开read/write,会造成同时占用内存和显存
12. 非标准尺寸压缩,在高级模式下拉成标准尺寸,然后再选压缩

你可能感兴趣的:(Unity游戏客户端内存控制经验list)