Shuriken vs. legacy particle system (performance issues)

I thought I’d post this here to shed some light on people who may be suffering from frame rate issues using the shuriken particle system.

I’m working on a shooting game for mobile devices and I had some severe performance issues using the shuriken particle system whenever there was more than 20 particle systems on screen at the same time. I know many people will recommend not having so many particle systems visible at the same time but being a shooting game, it really is hard to put a cap on that.

I came across some threads suggesting that I use the legacy system for particle effects that occur frequently (such as bullet impacts)

Using the legacy system, I was able to use a global particle emitter to spawn impact fx for all of the bullet impacts (thereby reducing my draw calls TREMENDOUSLY).

In a scene with 20 bullet impacts:
Shuriken system had 40 draw calls
Legacy system had 2 draw calls !!!

My FPS went up significantly ever since switching to the old Legacy particle system. I only use the shuriken for particle effects that occur very rarely (like a car explosion).

In Conclusion: Shuriken is much more user friendly to set up nice looking particle effects but if you plan on having any more than 10 particle effects visible at the same time, you really should consider switching to Legacy (especially on mobile devices). I wish the Unity documentation would have made that more obvious.

I’m not sure why you couldn’t use 1 single particle system and just move it to position of impact?

Isn’t there a decal system for things like bullet impacts?

Doing it this way would only allow you to have 1 particle system on screen at a time.
The legacy method allows you to have AS MANY as you want ON SCREEN AT THE SAME TIME and all using 1 draw call.

I’m using Unity 4.5 and afaik, it doesnt have an out of the box decal system.

Indeed, I do experience some problems with smoke using Shuriken. From the Standard Assets Package from Unity, there is a car demo. They just use 1 single particle system and move it where skid occurs.
The only problem is that I do have some performance issues with that.