Roblox · Обби · урок 3
Три новых препятствия: ступени, которые растворяются под ногами, платформа, которая возит игрока, и лента-конвейер, против которой надо бежать.
Синим — что добавляем на этом уроке.
Workspace ├─ Stairs (Folder) │ └─ Step (Part) — жёлтая ступенька │ └─ DisappearScript (Script) ├─ MovingPlatform (Part) — передняя грань (Front) — куда ехать │ └─ MoveScript (Script) └─ Conveyor (Part) — Anchored вкл. └─ ConveyorScript (Script)
Где: Workspace → Stairs → Step · Script
Зачем: Ступень растворяется и через 2 секунды возвращается.
-- ступенька
local part = script.Parent
-- ступень уже исчезает — повторные касания не считаем
local busy = false
-- касание
part.Touched:Connect(function(hit)
-- уже исчезает — выходим
if busy then return end
-- исчезает только от игрока
if not hit.Parent:FindFirstChildOfClass("Humanoid") then return end
-- занято
busy = true
-- 20 шагов
for i = 1, 20 do
-- с каждым шагом прозрачнее
part.Transparency = i / 20
-- всего за 1 секунду
task.wait(0.05)
-- конец цикла
end
-- сквозь ступень можно упасть
part.CanCollide = false
-- 2 секунды её нет
task.wait(2)
-- снова видна
part.Transparency = 0
-- снова твёрдая
part.CanCollide = true
-- готова к следующему игроку
busy = false
-- конец функции
end)Где: Workspace → MovingPlatform · Script
Зачем: Возит платформу туда-обратно.
-- платформа
local platform = script.Parent
-- сколько studs проезжает
local DISTANCE = 14
-- за сколько секунд
local TIME = 3
-- откуда
local start = platform.Position
-- куда: вперёд по передней грани (Front)
local finish = start + platform.CFrame.LookVector * DISTANCE
-- точка, за которую тянем
local attachment = Instance.new("Attachment")
-- в центре платформы
attachment.Parent = platform
-- сила, которая тянет деталь в точку
local align = Instance.new("AlignPosition")
-- тянем к координате, а не к другой детали
align.Mode = Enum.PositionAlignmentMode.OneAttachment
-- кого тянем
align.Attachment0 = attachment
-- сила без предела — игрок её не остановит
align.MaxForce = math.huge
-- скорость: путь за TIME секунд
align.MaxVelocity = DISTANCE / TIME
-- быстро реагирует
align.Responsiveness = 50
-- пока стоим на месте
align.Position = start
-- в платформу
align.Parent = platform
-- держит платформу ровно
local turn = Instance.new("AlignOrientation")
-- к заданному повороту
turn.Mode = Enum.OrientationAlignmentMode.OneAttachment
-- кого держим
turn.Attachment0 = attachment
-- жёстко, без раскачки
turn.RigidityEnabled = true
-- поворот как сейчас
turn.CFrame = platform.CFrame.Rotation
-- в платформу
turn.Parent = platform
-- теперь её двигает физика — игрок едет вместе с ней
platform.Anchored = false
-- физику платформы считает сервер — без рывков
platform:SetNetworkOwner(nil)
-- бесконечно туда-обратно
while true do
-- едем вперёд
align.Position = finish
-- доехали и стоим секунду
task.wait(TIME + 1)
-- едем обратно
align.Position = start
-- доехали и стоим
task.wait(TIME + 1)
-- конец цикла
endГде: Workspace → Conveyor · Script
Зачем: Лента тащит игрока.
-- лента (Anchored вкл.)
local part = script.Parent
-- скорость ленты; игрок ходит со скоростью 16
local SPEED = 12
-- закреплённая деталь не едет, но везёт всех, кто на ней
part.AssemblyLinearVelocity = part.CFrame.LookVector * SPEEDЗапусти Play (или Run) и убедись: