最近由于换工作几轮面试总结下来的一点优化知识点 . 为了方便以后记忆 , 特写此博客管理留存 ,
一. Unity内存优化技巧
1.代码方面 :
1.1:对于需要频繁修改替换的字符串 , 尽量使用"stringbuild"代替"string".
1.3:切记使用"WWW"类加载资源或对文件夹进行操作时时 , 当加载或操作完一定要记得卸载关闭 , 及时释放申请的内存
1.4:切记不要在Update、FixUpdate或较高调用频率的函数中开辟堆内存 . 如:new class/array 等 , 这会对内存和性能均造 成非常大的伤害.
2.资源方面
2.1:图片的控制: 1. 图集的长宽尽量为2的n次幂 , 因为图形学中只识别2的n次幂的大小,如果不足则会补足 , 这是一段非常耗时耗内存的 .
2.2:Android与IOS对于图片的大小有规定, Android < 1024, IOS <2048 这个尺寸, 大于会造成显示异常, 等不可预料的结果
2.3:图片的压缩格式: Android : 如果带Alpha 我们一般选择 ETC4 bits+ 一张带Alpha通道的 ETC4 bits图片 . IOS 则选择: PVRTC 4 bits 压缩格式 , 或者一些背景图需要保证不失帧会选择 Automatic 16 bits / Automatic Compressed
2.4:UI图片只要对效果没有很大的影响 , 能不带Alpha则不带Alpha .
2.5:减少模型的片面数 , 骨骼数 , 贴图的大小等
2.6:使用shader处理一些难处理的特效
二.Unity DrawCall优化
Unity对DrawCall的优化为我们提供了两种优化方案 , 1. Dynamic batch(动态合批) 2. Static batch(静态合批) , 对次我们需要根据项目的真是需求去取舍
1.Dynamic Batch : 当物体总面数小于300的情况下(无论是静态还是动态) , 使用相同的材质球的情况下 , Unity 会将其合并成一个Batch , 送往GPU渲染.
2.Static Batch : 是将标明为 Static 的静态物件 , 使用相同的材质球的情况下 , Unity会自动的将物体合并为一个Batch, 送往GPU , 这对我们在项目中起到了非常巨大的帮助.
优化方式:
1.材质的复用优化 : 在项目中我们应尽量遵循材质共享复用的原则 , 减少材质的数量 , 以减少DrawCall的产生.
2.将一些不会移动的物体勾选为static , 以便合批处理.
3.在打包UI图集时 , 注意处理分类 . 将一个模块的UI打包到一个图集中 , 使得在此模块中只需要将次图集送往GPU渲染一次产生一个DrawCall , 避免反复的使用不同的图集材质球 , 导致多次渲染.
3.管理好UI界面的特效 UI 层级 , 以便控制图片的渲染顺序 , 让程序在特定的时间只需要将对应的层级使用到的图集送往GPU渲染 , 减少DrawCall产生.
记录到此 , 待补充 …