I am aiming to create a coin effect like this which I found randomly (so I don’t know who made it).
What I got instead was this.
If this helps, I also found this as a reference that I hardly understood:
Attached file can be used to test as well what I tried to make:
CoinParticler.rbxm (4.7 KB)
Server script code
local coin = script.Coin
local coinSpawner = workspace.CoinSpawner
local coinSpawnerPos = coinSpawner.Position
local coinSpawnerCFrame = coinSpawner.CFrame
local coinSpawnerSizeHalf = coinSpawner.Size/2
local RunService = game:GetService("RunService")
local tweenService = game:GetService("TweenService")
local function lerp(a, b, c)
return a + (b - a) * c
end
local function cubicBezier(t, p0, p1, p2, p3) -- p0 is origin and p3 is destination
return (1 - t)^3*p0 + 3*(1 - t)^2*t*p1 + 3*(1 - t)*t^2*p2 + t^3*p3
end
local function travelCurve(p0, p1, p2, p3, moving)
for t = 0, 1, 0.05 do -- 0 <= t <= 1
local p = cubicBezier(t, p0, p1, p2, p3)
moving.Position = p
moving.CFrame = moving.CFrame * CFrame.Angles(math.random(1, 25), math.random(1, 25), math.random(1, 25))
RunService.Stepped:Wait()
end
end
local function transparencyQuad(object)
for i = 0, 1, 0.01 do
object.Transparency = tweenService:GetValue(i, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
RunService.Stepped:Wait()
end
object:Destroy()
end
local function coinFling()
local coinClone = coin:Clone()
local p0 = coinSpawnerCFrame * CFrame.new(0, 0, -coinSpawnerSizeHalf.Z)
p0 = p0.Position
local p1 = p0 + Vector3.new(math.random(-10, 10), math.random(5, 10), math.random(-10, 10))
local p2 = p1 + Vector3.new(0, 0, math.random(-10, 10))
local randomNumber = math.random(1, 2)
if randomNumber == 1 then randomNumber = -randomNumber
else randomNumber = 1
end
local randomNumber_2 = math.random(1, 2)
if randomNumber_2 == 1 then randomNumber_2 = -randomNumber_2
else randomNumber_2 = 1
end
local p3 = coinSpawnerCFrame * CFrame.new(randomNumber*coinSpawnerSizeHalf.X, -coinSpawnerSizeHalf.Y, randomNumber*coinSpawnerSizeHalf.Z)
p3 = Vector3.new(p2.X, p3.Y, p2.Z) + Vector3.new(0, 0, math.random(1, 5))
coinClone.Parent = workspace
coroutine.wrap(function()
travelCurve(p0, p1, p2, p3, coinClone)
end)()
coroutine.wrap(function()
transparencyQuad(coinClone)
end)()
end
while true do
for i = 1, 10 do
coinFling()
RunService.Heartbeat:Wait()
end
wait(2)
end