当前所在位置: 主页 > 耀世新闻 > 行业动态

Unity DC优化技巧

平时总结了一些优化技巧,仅当抛砖引玉,如有不足,多多指教。

1:粒子大小,如果可以的话,粒子的size应该尽可能地小。因为Unity的粒子系统的shader无论是alpha test还是alpha blending都是一笔不小的开销。同时,对於非常小的粒子,建议粒子纹理去掉alpha通道。大块的特效最好在模型上面做,不好用粒子。?

?

2:大面积使用的粒子,或者模型,尽量使用add模式,因为blend模式会渲染通道,消耗比较大的内存。?


3:如果粒子叠加层次比较多,尽量使用中空模型,会大大降低渲染的压力。

如图,如用到大面的环形效果,建议用右边的模型,中空,降低渲染压力。


4?shader的使用方面,特效一般情况使用mobile模式下的shader,如有特殊需求,可以用shader forgeshader,并由程序优化至确认可以使用。





5:粒子系统的使用方面,每个发射器发射多少个粒子,最大粒子数就写多少个,因为最大粒子数默认的1000个是粒子池,会占用内存。粒子特效基本不接收光影和产生光影,故光影的效果选项去掉。如下图:?


6:大部分特效不要加入灯光,如想表现灯光效果,可以用glow模拟光照效果。

?

7:特效中需要用的模型资源能合并,尽量在max中合并,因为在unity中,模型只要k了动画就算一个dc,如果模型事先没在max中合并,几个模型就有几个dc,例如翅膀特效。

就可以把模型做好都合并在一起,然后通过shader走uv,这样只会有1个dc?


8:?特效中用到的模型只使用一个skinned mesh renderer,角色方面也建议如此。

?

9?如需用到骨骼动画,骨骼数量不要超过30。

?

10:不要使用mesh collider,特效中的mesh都要去掉该组件。?



11:持续循环类特效发射周期尽量的大,因为周期如果很小,就会不断的生成发射器,这对cpu也有一定影响。如下图默认是5,调整到99999。




12:?粒子系统中,关于透明度与粒子数量的关系,尽量如图一,不要出现图二的情况;?



13:特效中如果要k动画,那么animator组件应该位于特效最上层级的下一级。其他所有层级均在动画层级之下。

14:贴图压缩格式:iOS上尽量使用PVRTC,Android上使用ETC

15:图集大小最好不要高于1024,否则游戏安装之后、低端机直接崩溃、原因是手机系统版本低于2.2、超过1000的图集无法读取导致。

16:特效中的mesh勾选静态以便合并?

?

17:unitypackage文件最终大小最好保持在1.2MB以下。贴图为带通道PNG贴图,最大不超过512*512。?单个贴图尽量控制64x64,细节比较多,经常用于大面积地方的贴图128x128,序列用于技能的不要超过256x256,用于全屏ui的序列,最大不要超过512x512,原则上不建议用序列,尽量用单个贴图,通过溶解等shader来实现序列效果。

所有贴图大小尺寸为1:1,2的幂次方。

18:特效中用到的模型面数要尽量控制,选择合理的制作方法,避免出现高面数的模型。

19: 新导入的模型都必须去掉这个选项。?


20:如果模型不带动画,选择该模式。?

?

21:由于项目是3d项目,所以在特效制作方面,能用3d的手法就不要用很大的序列图。浪费很大资源,如有需要2d动效,可以用2d骨骼软件。输出蒙皮信息结合3d粒子效果。

?

?

个例:如何减少DC

?

这是我们的受击特效。DC是5个

如果创建N个的话 DC会怎么样呢?

?

可以看到Batches 1257....难怪卡死了....

?

这个特效是由5个例子特效组成的。我把每个粒子特效的OrderInLayer重新设置。2000,2001,2002,2003,2004

确保每个粒子的OrderInLayer不同.不要重复.

?

接下来就是见证奇迹的时候了......0 0、

?

可以看到重复创建的特效都跑到Saved by batching了。

大家理解了吗?特效又有新的事情要做了。

?

PS:关于单个特效也是能优化的。原理是一样的

?

这是一个散射子弹的特效。看这个特效的结构是相同的特效复制了5份换成了不同的角度。

我还是一样的把OrderInLayer重新设置了。不过每个sq_skill_3_ball,sq_skill_3_fire,sq_skill_3_light都是设置成一样的。

再一次见证奇迹的时刻- -、

?

没修改前DC的顶峰会随时间在12-16徘徊。

修改后DC的顶峰稳定在8.


平台注册入口