Hey! I’m Daniel and I was wondering, how would I create a particle engine like this: https://roblox.com/games/4595863515/Portal…
For example, once you press a ball or a wedge, Sparks pop up and bounce on the ground.
I’ve tried things like a particle grid or cframing particle bricks.
They all failed due to the unrealistic or laggy look.
If anyone could give me a tip or help me further into this, thank you.
Also side note, I’ve posted this on Art Design Support as I’m not sure if it’s about a script or about SFX.
My guess is that when it hits that it spawns a bunch of small spheres on the client with a random velocity being added that pushes them outward. That way it is just the physics system handling it.
I’ve updated it to handle replication and prevent player collisions.
My guess is that it uses invisible spheres with billboardguis as the visible particle, and then disabled collision with the player using collectionservice.
Hey, could you make it so it’s not a particle you have to enable trough button? I’m on mobile right now as I’m sick so I can’t see. Sorry for the inconvenience.
Hm this seems interesting, but I’m not the best at scripting, so how would I make it so this plays infinitely or just for a few secs without having to press a button? Maybe one with a button and one without?
This is a solution btw, thanks.
So this can be called as a function in the script. In that little demo I didn’t bother with replication to other clients or collision groups to make it not collide with the player.
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local spawnPoint = game.Workspace:WaitForChild("Base")
local tweenInfo = TweenInfo.new(3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
local particles = function()
for i = 1, 30 do
local b = script.Part:Clone()
for _, v in pairs(game.Players.LocalPlayer.Character:GetChildren()) do
if v:IsA("BasePart") then
local n = Instance.new("NoCollisionConstraint")
n.Parent = b
n.Part0 = b
n.Part1 = v
end
end
local spawnLoc = Vector3.new(math.random(-100, 100) / 100,math.random(-50, 50) / 100,math.random(-100, 100) / 100)
b.Position = spawnPoint.Position + spawnLoc
b.Velocity = spawnLoc*math.random(5,40)
b.Parent = game.Workspace.CurrentCamera
TweenService:Create(b,tweenInfo,{Transparency = 1}):Play()
game:GetService("Debris"):AddItem(b, 3)
end
end
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if not gameProcessed and input.UserInputType == Enum.UserInputType.MouseButton1 then
particles()
end
end)
UserInputService.TouchTap:Connect(function(input, gpe)
if not gpe then
particles()
end
end)
However it will cause short lag on client, so I would reccomend using PhysicsService