Hello! I tried to make an escalator. Since I made it go up, my only issue is how do I make it go down.
Script inside up escalator:
local steps = script.Parent:WaitForChild("Steps"):GetChildren()
table.sort(steps, function(a, b)
return a.Position.Y < b.Position.Y
end)
local startPos = steps[1].Position
local endPos = startPos.Y + (#steps - 1) * steps[1].Size.Y
local speed = 1
local tweenService = game:GetService("TweenService")
local info = TweenInfo.new(speed, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut)
while wait(speed) do
for _, step in pairs(steps) do
if step:IsA("Part") then
local y, z = (1/speed) * step.Size.Y, (1/speed) * step.Size.Z
step.Velocity = Vector3.new(0, y, z)
if math.floor(step.Position.Y + 0.5) >= math.floor(endPos) then
step.Position = startPos
end
local tween = tweenService:Create(step, info, {Position = step.Position + Vector3.new(0, step.Size.Y, step.Size.Z)})
tween:Play()
end
end
end
Script inside down escalator:
local steps = script.Parent:WaitForChild("Steps"):GetChildren()
table.sort(steps, function(a, b)
return a.Position.Y > b.Position.Y
end)
local startPos = steps[1].Position
local endPos = startPos.Y + (#steps - 1) * steps[1].Size.Y
local speed = 1
local tweenService = game:GetService("TweenService")
local info = TweenInfo.new(speed, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut)
while wait(speed) do
for _, step in pairs(steps) do
if step:IsA("Part") then
local y, z = (1/speed) * step.Size.Y, (1/speed) * step.Size.Z
step.Velocity = Vector3.new(0, y, z)
if math.floor(step.Position.Y + 0.5) >= math.floor(endPos) then
step.Position = startPos
end
local tween = tweenService:Create(step, info, {Position = step.Position - Vector3.new(0, step.Size.Y, step.Size.Z)})
tween:Play()
end
end
end
NOTE: Each escalator includes 11 steps. Here’s the video I watched: