What is the issue? Include screenshots / videos if possible!
I dont know how to make it do that
What solutions have you tried so far? Did you look for solutions on the Creator Hub?
I made it so it moves sideways a bit but it doesnt give the effect i want
local tornadoTopY = 400
local tornadoBottomY = 0
local tornadoHeight = tornadoTopY - tornadoBottomY
local tornadoDescendSpeed = 0.5
local baseSize = Vector3.new(40, 50, 40)
local basePos = Vector3.new(200, tornadoBottomY, 100)
while true do
local part = Instance.new("Part")
local mesh = Instance.new("SpecialMesh")
mesh.Parent = part
mesh.MeshType = Enum.MeshType.Sphere
part.TopSurface = Enum.SurfaceType.Smooth
part.BottomSurface = Enum.SurfaceType.Smooth
part.Size = baseSize
part.Position = basePos
part.Anchored = true
part.CanCollide = false
part.Color = Color3.fromRGB(59, 56, 63)
part.Transparency = 1
part.Parent = game.Workspace
task.spawn(function()
while part.Parent do
part.Position = part.Position + Vector3.new(0, 1, 0)
part.Size = part.Size + Vector3.new(0.2, 0.2, 0.2)
if part.Position.Y >= tornadoTopY then
part.Transparency = 0
else
part.Transparency = 1
end
task.wait()
end
end)
task.spawn(function()
task.wait(5)
part.Transparency = 1
task.wait()
part:Destroy()
end)
tornadoTopY = tornadoTopY - tornadoDescendSpeed
if tornadoTopY < tornadoBottomY then
tornadoTopY = tornadoBottomY
end
task.wait()
end
Here are a few versions. They are just sitting in the same spot, rotating and bending like a tornado.
They are made of balls that increase in size as they go up, like in your picture (all are anchored).
ServerScript is what I tested with.
local segs = workspace:WaitForChild("Tornato"):GetChildren()
local rs = game:GetService("RunService")
local base = segs[1].Position
local t = 0
local offsets = {}
for i,p in ipairs(segs) do
offsets[i] = p.Position - base
end
rs.Stepped:Connect(function(_,dt) t += dt
local rot = CFrame.Angles(0,t,0) --rotation speed
for i,p in ipairs(segs) do
local bend = math.sin(t*2 + i*0.4) * 2 --bend
local offset = offsets[i] + Vector3.new(bend,0,0)
p.CFrame = CFrame.new(base) * rot * CFrame.new(offset)
end
end)
local segs = workspace:WaitForChild("Tornato"):GetChildren()
local rs = game:GetService("RunService")
local base = segs[1].Position
local t = 0
local offsets = {}
for i,p in ipairs(segs) do
offsets[i] = p.Position - base
end
rs.Stepped:Connect(function(_,dt) t += dt
local angle = t --rotation speed
local rot = CFrame.Angles(0,angle,0)
for i,p in ipairs(segs) do
local bx = math.sin(t*2 + i*0.4) * 2 --sway
local bz = math.cos(t*2 + i*0.4) * 2 --bend
p.CFrame = CFrame.new(base) * rot * CFrame.new(offsets[i] + Vector3.new(bx,0,bz))
end
end)
I actually just tested it, it works cool but sphere 3 and 4 are “disconnected” from each other, also do you know how to implement it to my current tornado system too?
Not sure how you set yours up.. them are in a folder on the workspace all together and only them. Should pick everything up with the :GetChildren(). One stays in place the other kind of wanders. I wasn’t re-writing your script, I was just looking for the math that would do that bending..
Im just changing values at this point until i get it to look good (also thats my full script so testing it is as simple as putting a server script in workspace and pasting the code in and pressing run (and if you ask why tornadoheight is never used, its because i was gonna do something with it later))
Do you have any ideas for values to get a smooth, slight swirl/bend?