0.资源卸载与引用计数逻辑(内存)

https://www.cnblogs.com/billyrun/articles/17855697.html

 

1.确定各平台纹理格式(内存、流畅性、包体大小)

统一ASTC,OPENGL ES 3.1之后统统支持(2014年后机型)

 

2.制定不同资源 AssetBundle 打包策略(流畅性、包体大小)

启动、热更界面资源与游戏内资源分开处理

AB包控制在1~10MB左右,小资源(icon、配置等)合并为1个AB,大资源(立绘、spine、图集)单独1个AB

shader打成一个ab

公共材质打ab,特定材质可以和粒子打一起

 

3.制定UI 界面预加载、分段加载策略(流畅性)

多语言资源与预制并行加载

多tab、多页的页面可以分段分帧加载或实例化

列表里的节点可以由协程分帧实例化

 

4.规范图集使用策略(内存、流畅性)

图集不宜过大(不超过一张2048)

大的部分用散图,维护好公共图集,避免反向使用图集

 

5.处理网络请求(流畅性)

与资源加载并行,接口内容不宜过大,否则json解析时造成主线程卡顿(也可挪至子线程)

请求多个接口时,不能for循环内await

 

6.配置表查找(流畅性)(排序)等等引起的卡顿优化

冗余配表删减(内存)

 

7.shader变体优化,变体收集与剔除(内存)

multicomplie或生成所有变体,不会丢失,但内存占用较大,运行时程序动态切换的话可以考虑使用

shaderfeature需要收集变体(shadervarientcollection)

与相关材质打在一起

或unity跑全场景生成shadervariantcollection

或写工具生成shadervariantcollection

或always include

注意,收集生成的shadervariantcollection需要与相关shader打在同一个ab里面

 

8.stream读写优化(using stream)

9.组件优化(流畅性)(多个小组件改一个大组件、节点优化减少节点数量,粒子效果优化,减少嵌套粒子)

10.减少反复实例化,合理使用对象池(流畅性)

 

11.GC优化(流畅性)

核心是减少堆上分配的引用对象

减少linq的使用,减少闭包的使用,减少字符串拼接,减少log,减少装箱(ArrayList)

使用对象池,避免重复创建与销毁对象;小的频繁使用的数据结构用struct去定义,不用class

 

12.降低RT分辨率(内存)Screen.SetResolution

动态分辨率(URP相机可设置)

 

13.画质分级与内存分级(流畅性、内存)

默认画质与默认内存的设置逻辑

UnityEngine.Device.SystemInfo读取设备信息

预先记录top100设备的benchmark信息作为参照,根据显卡信息比对,白名单

GSMarena网站查询机型的benchmark 70以上高端机高画质,50-70中端,50以下低端

 

性能标准制定:芯片(高端门槛骁龙865)、面数(30W内-100W)、Batch(150内-300)、粒子数、内存分布(托管:mono,il2cpp,会产生GC;非托管:nativearray,原生内存)

流畅性标准制定:与电影帧的对比,与前3帧的对比

https://blog.csdn.net/NitefullSand/article/details/106138326

 

 

 

 

 

暂列提纲,详细内容待补充