Лифт: вверх и вниз по кнопке E
Подъёмная платформа с двумя остановками.
При нажатии E лифт плавно поднимается и опускается вместе со стоящими на нём персонажами (обычно благодаря физике контакта).
1. Подготовьте объект
Где разместить: Script внутри Elevator
Создайте Part Elevator, Anchored = true.
Добавьте внутрь Elevator ProximityPrompt и Script.
Вставьте код; игрок должен стоять на платформе перед запуском.
2. Вставьте код
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, прыжок или освещение, могут влиять друг на друга.
Замените высоту 20 на 35.
Добавьте рядом отметки этажей.
Постройте башню с двумя уровнями.
4. Проверьте себя
Почему важно проверить, как лифт переносит пассажира?
Платформа должна быть Anchored, а персонаж — стоять сверху до начала движения. Код рассчитан на простую вертикальную платформу.