编程文汇

unity粒子特效drawcall合并

只适用于2019.1.9f1以后的版本。之前的版本无法合并使用同一atlas(unity自动打包的atlas)多个粒子系统的drawcall。这个bug刚在2019.1.9f1中修复。

这个bug在之前的某些版本中没有出现,后来才有的,因为我记得之前我也是使用类似的流程,drawcall并不高,是更新了几个版本后,有一天看drawcall的时候,突然发现多了很多。直到前几天才再次修复。

  1. 使用TextureSheetAnimation,这里可以选择使用sprites。因为粒子系统的图片具有很高的复用度,不会很多,打包在同一个atlas里面。
  2. 在render里选择使用同一个材质Material。可以自己创建一个,shader选择mobile->paticles->alpha blend。
  3. 在render里选择sorting layer,可以专门为粒子系统设立一个或者几个层,把粒子系统的显示限制在这些层里。一般来说爆炸、子弹等特效显示的前后位置不是很重要,所以这样设置基本不影响视觉效果,而同时大大提高了渲染效率。
  4. 做完以上工作,粒子系统的drawcall就只有一个。

如果是之前的版本,根据别人的经验,是需要手工打包图集的,然后使用TextureSheetAnimation的Grid来选择要使用的图片,整个流程麻烦很多,不过也能降低drawcall。我用的是新版本,就可以用上面的方式简化使用流程。