Лифт-платформа по кругу
Платформа плавно перемещается между верхней и нижней точкой.
Платформа автоматически движется вверх на 25 studs, ждёт 2 секунды и опускается. Это простая учебная анимация платформы.
1. Подготовьте объект
Где разместить: Обычный Script в ServerScriptService
В Workspace создайте широкий Part ElevatorPlatform, установите Anchored = true и CanCollide = true. Добавьте внутрь обычный Script и вставьте код.
В Play встаньте на платформу: лифт поднимется на 25 studs, остановится на 2 секунды и опустится обратно. Проверьте движение и с двумя игроками.
Это учебная реализация: она переносит игроков, стоящих на платформе, но не переносит NPC или незакреплённые предметы. Для полноценного лифта с кабиной нужен отдельный контроллер.
2. Вставьте код
-- Script внутри ElevatorPlatform (Part)
-- Лифт сам ездит вверх и вниз и переносит стоящих на нём игроков.
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local platform = script.Parent
local HEIGHT = 25
local TRAVEL_TIME = 5
local WAIT_AT_END = 2
local bottom = platform.CFrame
local top = bottom + Vector3.new(0, HEIGHT, 0)
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Include
params.FilterDescendantsInstances = {platform}
local function getRiders()
local riders = {}
for _, player in ipairs(Players:GetPlayers()) do
local character = player.Character
local root = character and character:FindFirstChild("HumanoidRootPart")
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if root and humanoid and humanoid.Health > 0 then
local hit = workspace:Raycast(root.Position, Vector3.new(0, -7, 0), params)
if hit and hit.Instance == platform then
riders[#riders + 1] = character
end
end
end
return riders
end
local function move(from, destination)
local elapsed = 0
while elapsed < TRAVEL_TIME do
elapsed = math.min(TRAVEL_TIME, elapsed + RunService.Heartbeat:Wait())
local t = elapsed / TRAVEL_TIME
local eased = t * t * (3 - 2 * t)
local previous = platform.CFrame
local passengers = getRiders()
local nextFrame = from:Lerp(destination, eased)
platform.CFrame = nextFrame
local delta = nextFrame * previous:Inverse()
for _, character in ipairs(passengers) do
if character.Parent then character:PivotTo(delta * character:GetPivot()) end
end
end
end
while platform.Parent do
move(bottom, top)
task.wait(WAIT_AT_END)
move(top, bottom)
task.wait(WAIT_AT_END)
end3. Проверьте в игре
Нажмите Play в Roblox Studio и проверьте действие механики. Если механика не работает, откройте окно Output и проверьте тип скрипта, его расположение и названия объектов.
Когда проверите механику в Roblox Studio, отметьте практику как выполненную. Отметка хранится только в этом браузере, не в личном кабинете.
Добавляйте механики по одной и проверяйте окно Output. Не создавайте несколько одинаковых систем монет или интерфейсов; скрипты, меняющие WalkSpeed, прыжок или освещение, могут влиять друг на друга.
Измените HEIGHT с 25 на 12.
Сделайте платформу шире и измените время подъёма.
Постройте космический лифт между двумя башнями.
4. Проверьте себя
Что делает лифт после достижения верхней точки?
Если персонаж не поднимается, проверьте, что стоит именно на ElevatorPlatform, а не на соседней детали. Убедитесь, что платформа Anchored = true, CanCollide = true и путь вверх свободен. Не добавляйте второй скрипт движения на ту же платформу.