All particles “pause” when you stop looking at them. For example, if the Enabled
property is set to true, the particle will not update its’ time unless the user is looking at it.
A big problem is created when you use :Emit()
. :Emit()
is usually used to emit particles that do not last indefinitely. This creates a conflict with the behaviour mentioned above. Using this method on a particle emitter outside of the viewport will cause it to be cached. Causing it to “yield” until the particle goes into the viewport of the player. Particles will still be rendered even after it’s destroyed. This creates unwanted visual artifacts such as in this video:
I’ve AFK’d for a few minutes with a lot of particles using :Emit()
outside of my viewport. As you can tell, there is a massive number of particles being rendered on screen. This is not only jarring but degrades performance. This has a large impact on any games that use a large number of particles.
Expected behavior
Using :Emit()
will make the particle run in the background, lasting only the specified amount of time.
For example, if :Emit()
is used off-screen and the particle lasts 1
second, I would expect the particle to be non-existent if I look in the direction of the particle after 1
second. I expect the timer for the particle to start instantaneously to the method call, not until I look at it.