← Все практические скрипты
Платформы · Уверенный · 20 мин

Лифт: вверх и вниз по кнопке E

Подъёмная платформа с двумя остановками.

Иллюстрация: Лифт: вверх и вниз по кнопке E
🎯 Что получится

При нажатии E лифт плавно поднимается и опускается вместе со стоящими на нём персонажами (обычно благодаря физике контакта).

1. Подготовьте объект

Где разместить: Script внутри Elevator

Создайте Part Elevator, Anchored = true.
Добавьте внутрь Elevator ProximityPrompt и Script.
Вставьте код; игрок должен стоять на платформе перед запуском.

2. Вставьте код

Script
local platform = script.Parent
local prompt = platform:WaitForChild("ProximityPrompt")
local RunService = game:GetService("RunService")
local busy = false
local atTop = false
local bottom = platform.CFrame
local top = bottom + Vector3.new(0, 20, 0)

local function riders()
    local found = {}
    for _, part in ipairs(workspace:GetPartsInPart(platform)) do
        local char = part:FindFirstAncestorOfClass("Model")
        local hum = char and char:FindFirstChildOfClass("Humanoid")
        local root = char and char:FindFirstChild("HumanoidRootPart")
        if hum and root and hum.Health > 0 then found[char] = true end
    end
    return found
end
prompt.Triggered:Connect(function()
    if busy then return end
    busy = true
    prompt.Enabled = false
    local start = platform.CFrame
    local finish = atTop and bottom or top
    local passengers = {}
    -- Расстояние до поверхности: стоящие непосредственно на лифте персонажи.
    for _, player in ipairs(game:GetService("Players"):GetPlayers()) do
        local char = player.Character
        local root = char and char:FindFirstChild("HumanoidRootPart")
        local hum = char and char:FindFirstChildOfClass("Humanoid")
        if root and hum and hum.Health > 0 then
            local localPos = start:PointToObjectSpace(root.Position)
            if math.abs(localPos.X) <= platform.Size.X/2 and math.abs(localPos.Z) <= platform.Size.Z/2
               and localPos.Y > platform.Size.Y/2 and localPos.Y < platform.Size.Y/2 + 7 then
                passengers[char] = true
            end
        end
    end
    local elapsed = 0
    while elapsed < 5 do
        local dt = RunService.Heartbeat:Wait()
        elapsed = math.min(5, elapsed + dt)
        local alpha = elapsed/5
        alpha = alpha*alpha*(3-2*alpha)
        local previous = platform.CFrame
        local nextFrame = start:Lerp(finish, alpha)
        platform.CFrame = nextFrame
        local delta = nextFrame * previous:Inverse()
        for char in pairs(passengers) do
            if char.Parent then char:PivotTo(delta * char:GetPivot()) end
        end
    end
    atTop = not atTop
    prompt.Enabled = true
    busy = false
end)

3. Проверьте в игре

Нажмите Play в Roblox Studio и проверьте действие механики. Если механика не работает, откройте окно Output и проверьте тип скрипта, его расположение и названия объектов.

Ваш прогресс

Когда проверите механику в Roblox Studio, отметьте практику как выполненную. Отметка хранится только в этом браузере, не в личном кабинете.

Если объединяете несколько скриптов

Добавляйте механики по одной и проверяйте окно Output. Не создавайте несколько одинаковых систем монет или интерфейсов; скрипты, меняющие WalkSpeed, прыжок или освещение, могут влиять друг на друга.

⭐ Три шага к собственной игре
1. Повторите и измените

Замените высоту 20 на 35.

2. Улучшите

Добавьте рядом отметки этажей.

3. Придумайте своё

Постройте башню с двумя уровнями.

4. Проверьте себя

Почему важно проверить, как лифт переносит пассажира?

🛠 Если не работает

Платформа должна быть Anchored, а персонаж — стоять сверху до начала движения. Код рассчитан на простую вертикальную платформу.