Particle Emitter +

Tired of particle emitter being not realistic? Not having trails? Not being able to collide? Not interacting with parts? Well I am here to terminate that!

Introducing Particle Emitter +

It does lack a few features… But does the job done!

Current Features Inherited from Roblox particle Emitter:
Transparency* Lerping transparency by lifetime
Color Lerping color by lifetime
Size Lerping size by lifetime
Spread
Rotational Speed
Spread particles by how big the surface of the part is (Idk how to explain this part)
Rate
Acceleration
Life Influence
Bright ness

New Features:
Trails
Collision

(I know it isnt much but the 2 features are kinda the most wanted by the community (I THINK))
(This project is was also done as a fun project its not that professional nor advanced)

Particle Emitter + in action: (Sorry for bad video quality)

How to use?

local Module = require(game.ReplicatedStorage.ParticleEmitter) -- Path to module

local Transparency = { -- Make sure its a table
	{0, 0}, -- The first number is the time. The second being the value. And it should have a time that is 0 Aka the start.
	{100, 0} -- The first number is the time. The second being the value. And it should have a time that is 100 Aka the end.
}

local Color = { -- Same as transparency but with color
	{0, Color3.fromRGB(123,61,61)},
	{100, Color3.fromRGB(123,61,61)},
}

local Size = { -- Same as transparency but with size
	{0, 1},
	{90, 1},
	{100,0}
}

while wait() do -- Loop
	Module.Emit(20,2,10,10,Vector3.new(0,-5,0),script.Parent,50,Transparency,Color,Size)
	-- First variable is the Rate. Second is Age, Third being Speed, Forth being Spread, Fifth being Acceleration, Sixth being the part that is emitting. Seventh being rotation speed. From Eight to Tenth they are what they say
end

After inserting the model put it in ReplicatedStorage and ungroup it.

Hope you like it. Constructive feedback is your choice idc.

Rate it
  • Good
  • Ok
  • Bad (IF you say it lacks features THEN I KNOW)

0 voters

How is it for beginners? Who can’t make there own.
  • Good for beginners.
  • Bad for beginners.

0 voters

22 Likes

How performant is this? i.e. How will it handle with many particles emitting at the same time and in a workspace with many parts to possibly collide with

1 Like

I’m looking at the source code right now and I can see that you’re using deprecated code also every time you tween one of the particle parts, you use GetService, which isn’t a good way of doing it.

Secondly, you have a script in each particle which is called lerp handler, which makes a loop with 100 iterations.

I wouldn’t really recommend this for actual game-making, since this is very unperformant.

Nope it worked smoothly for me no lag at all!

2 Likes

Nope its smooth no fps drop. + Use it if u wanna. idc

2 Likes

I can see you only used a single part emitting particles a low rate, which doesn’t really justify it.

I want a performance benchmark to see how good it actually is compared to the normal particle emitters. If it is worse performance then it isn’t “plus” then it’s just an alternative.

what makes it + is just the collision and trail. If your complaining so much then go fix it your self. idc.

1 Like

I just did a performance testing on it and it’s significantly worse than normal particles with 500 rate on 4 parts, whereas if you were to use particle emitters (the normal one) then you can use 40 parts with 500 rate without any lag (I can only use 40 parts due to Roblox’s particle limit.)

Unrelated question to the post, but why is using GetService not good? Is it that he calls it every time he wants a tween instead of predefining it? Or is it something else?

Did you read what I said?

They’re using GetService each time they’re tweeting a singular particle part.

Here’s a list on what bad thing they’re doing:

  1. They’re using GetService each time they create a particle.
  2. They’re using a loop with 100 iterations to lerp each part
  3. They have a “LerpHandler” in each part (an independent script per particle, very bad.)
  4. They’re using .Velocity, which is decrepated and shouldn’t be used anymore.
  5. They aren’t disconnected the bindable .Event connections, which slowly/fast (depending on your rate) will begin to lag.
  6. It’s using PHYSICS for each particle, which takes a lot of computanial power to use.
1 Like

Just because it worked out smoothly for you, doesn’t mean it’ll work smoothly for others, especially if they have a low end device.

TL;DR: This module is very unorganized, inefficient, and very bad with performance.


  1. You aren’t using any variables.
  2. Never use the parent argument with Instance.new(): Instance.new("Folder",workspace)
  3. You use one script for every particle, which is the worst thing you could do.
  4. You use BindableEvents, which cause memory leaks. Consider using GoodSignal by @stravant instead.
  5. Not very beginner friendly, major use of tables which are not optional.

That’s it. Have a good day.

7 Likes

I have a low end device too! It can run roblox games at 20 fps. But in studio i had 60 fps as normal

1 Like

Keep in mind you were testing this with one particle emitter, and low-end devices can struggle. This code can be better in many, many ways but currently it’s very unperformant.

You must keep in mind that there are extremely low-end PCs that would most likely
drop their framerates significantly upon using multiple of these.

He said it better:


Damn bro we were just trying to help you lmao

1 Like

I know but help in a supportive way.

1 Like

Questions Answered
for @intergravitation, @2jammers, @syntaqs, @vrs2210 (sorry for ping.)

This is supposed to be used sometimes. Like closeup particles and stuff. Or if you wanna add some physics to particles. I used 100 iterations cuz I didnt find any other way. I used BindableEvents and script in every single particle cuz I didnt know a way to do it in 1 script. (Acc I did but that would be hard). I am a messy scripter ik. Ok I wont use parent argument for Instance.new() but tell me why?

I hope this answered all your questions if I didnt answer one of your questions tell me here.

2 Likes

The SetParent argument in Instance.new() is deprecated and it actually runs way slower than just setting the instance’s parent in the next line.

oh ok. thanks for telling me that.

1 Like

You should set the parent of a new instance AFTER you have said all the properties correctly. It has been reported by roblox staff that changing properties after setting the parent is much slower than first setting the properties.

Thank you for replying to the criticism.

Don’t be rude to people being critical about your stuff, we are just trying to be helpful so you can improve next time. Thanks for replying appropriately this time.