Roblox · Дополнительное
Платформа (вместе с перилами и украшениями) ездит туда-обратно и везёт стоящих на ней игроков. Её двигает физика (AlignPosition), а не Tween — поэтому игрок не выскальзывает из-под ног, как с обычной анимированной платформой.
Синим — что нужно создать.
Workspace └─ MovingPlatform (Model) — PrimaryPart = Base ├─ Base (Part) — пол платформы; Anchored вкл. в редакторе — скрипт отключит сам ├─ RailLeft, RailRight (Part) — перила (по желанию), Anchored ├─ Configuration (Configuration) │ ├─ Offset (Vector3Value) — куда ехать от начала, 0, 0, 30 │ ├─ Time (NumberValue) — секунд в одну сторону, 4 │ └─ Pause (NumberValue) — секунд стоит на конце, 1 └─ MovingPlatformServer (Script)
Где: Workspace → MovingPlatform · Script
Зачем: Двигает платформу туда-обратно физикой — стоящих на ней она везёт с собой.
-- платформа — модель: пол Base, перила и украшения
local platform = script.Parent
-- главная деталь: её тянет физика
local base = platform.PrimaryPart or platform:FindFirstChild("Base")
-- главной детали нет
if not base then
-- подсказка в Output
warn("Движущаяся платформа: задай PrimaryPart у модели")
-- дальше не работаем
return
-- конец проверки
end
-- куда и как быстро ехать
local config = platform:WaitForChild("Configuration")
-- куда ехать от начала (Vector3)
local offset = config.Offset.Value
-- секунд в одну сторону
local travel = config.Time.Value
-- секунд стоит на конце
local pause = config.Pause.Value
-- начальная точка
local start = base.Position
-- все детали модели
for _, part in pairs(platform:GetDescendants()) do
-- кроме главной
if part:IsA("BasePart") and part ~= base then
-- сварка: деталь держится за Base
local weld = Instance.new("WeldConstraint")
-- к чему привариваем
weld.Part0 = base
-- что привариваем
weld.Part1 = part
-- сварку храним в детали
weld.Parent = part
-- деталь едет вместе с Base
part.Anchored = false
-- конец проверки
end
-- конец перебора
end
-- точка, за которую тянем
local attachment = Instance.new("Attachment")
-- в главную деталь
attachment.Parent = base
-- тянет платформу к цели
local align = Instance.new("AlignPosition")
-- цель — просто точка в мире
align.Mode = Enum.PositionAlignmentMode.OneAttachment
-- кого тянем
align.Attachment0 = attachment
-- без ограничения силы — не провиснет под игроками
align.MaxForce = math.huge
-- скорость: путь ÷ время
align.MaxVelocity = offset.Magnitude / travel
-- держит скорость точно
align.Responsiveness = 50
-- пока стоит на месте
align.Position = start
-- включаем
align.Parent = base
-- не даёт платформе наклоняться
local orientation = Instance.new("AlignOrientation")
-- держит заданный поворот
orientation.Mode = Enum.OrientationAlignmentMode.OneAttachment
-- кого держим
orientation.Attachment0 = attachment
-- поворот — как в редакторе
orientation.CFrame = base.CFrame
-- жёстко
orientation.RigidityEnabled = true
-- включаем
orientation.Parent = base
-- двигает физика — поэтому стоящих на ней она везёт с собой
base.Anchored = false
-- физику всей модели считает сервер — у всех одинаково
base:SetNetworkOwner(nil)
-- бесконечно туда-обратно
while true do
-- едем в конец
align.Position = start + offset
-- доехали и постояли
task.wait(travel + pause)
-- едем обратно
align.Position = start
-- доехали и постояли
task.wait(travel + pause)
-- следующий круг
endЗапусти Play (или Run) и убедись: