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
暂列提纲,详细内容待补充