关于app经过大量场景资源更新迭代后,一起的卡死闪退等问题的处理,目前定位为内存溢出的现象:

  1. 由于最初都是采用的非动态加载的方式进行的资源加载,目前需要全部调整到动态的资源加载(否则到达一定的加载上限后,就会影响启动崩溃)。
  2. 资源的优化部分:
  1. 贴图的压缩:包括大型贴图的压缩、地形贴图等的压缩、lightmap的压缩等;
  2. 模型的处理:此处主要是针对模型动态创建standard材质的问题规避(有可能为ab包加载导致),导入模型吃material设置为standard,然后location选择UseExternalMaterials,然后将生成的材质球的shader更改为其余替代材质,目前使用custom/standard,后续可考虑更优方案;
  3. 对于粒子系统的统一处理。目前发现在当前版本中(2019.4.18),粒子系统的拖尾设置中,即使不使用拖尾效果,也会在使用ab包加载的过程中动态创建默认的default材质球,而其使用的默认standard材质,消耗是非常大的。
  1. shader的优化:尽量避免使用默认shader,默认shader的变体较多,尤其在移动设备上,这些变体都会经过内存,导致内存疯长。即使使用时也应该先观察变体的数量,一版在100以下为最好,数量越小越好。
  2. 对于unity自带地形的处理。在游戏制作当中,可能美术会引入一些购买的地形资源或者自己刷地形,如果我们的设备是安卓设备、VR设备,极力不推荐使用默认的地形。可以将其转化为普通的mesh,在进行烘焙等处理。这样既能优化shader,又对贴图记性了处理,一举多得。
  3. 一些其他办法:目前在app的测试分析中,发现消耗的大头来源于两个,一个是shaderlab,另外一个是相机贴图的绘制。shaderlab的优化是一个漫长的过程来处理一些旧有的资源(之前制作过的项目资源,还有一些插件中的直接引用带来的问题),而且随着项目的更新可能会制定一些规范来要求美术资源,渐渐的会有所解决。而相机的绘制能够直观的减少内存的占用,但是随之而来的画面质量也就会出现下降,所以需要寻找一个均衡的点。