Roblox · Движение

Планер

Предмет-планер: пока он в руках и персонаж падает, падение медленное, а персонаж летит вперёд, туда, куда смотрит. Прыгай с высоты и планируй через всю карту.

Структура

Синим — что нужно создать.

StarterPack
└─ Glider (Tool)
   ├─ Handle (Part) — крыло: широкая тонкая деталь, CanCollide выкл.
   └─ GliderLocal (LocalScript)

Шаги

  1. Tool «Glider», Handle — широкая тонкая деталь (6 × 0.2 × 2), CanCollide выкл., Massless вкл. Положение в руке подбери плагином Tool Grip Editor — крыло над головой.
  2. В Tool — LocalScript «GliderLocal».
  3. Как работает: пока планер в руках, каждый кадр проверяем — персонаж в воздухе и падает быстрее FALL_SPEED? Тогда скорость вниз ограничиваем, а вперёд даём GLIDE_SPEED по взгляду. Поворачиваешься — летишь в новую сторону.
  4. Убрал планер — падаешь как обычно.

Скрипты

GliderLocal

Где: StarterPack → Glider · LocalScript
Зачем: Медленное падение и полёт вперёд.

-- планер (Tool)
local tool = script.Parent
-- события каждого кадра
local RunService = game:GetService("RunService")
-- скорость падения с планером
local FALL_SPEED = 6
-- скорость полёта вперёд
local GLIDE_SPEED = 30
-- подписка на кадры
local connection = nil

-- взяли планер в руки
local function OnEquipped()
    -- каждый кадр
    connection = RunService.Heartbeat:Connect(function()
        -- персонаж
        local character = tool.Parent
        -- Humanoid
        local humanoid = character:FindFirstChildOfClass("Humanoid")
        -- центр
        local root = character:FindFirstChild("HumanoidRootPart")
        -- нет персонажа
        if not humanoid or not root then return end
        -- стоит на земле — планер не работает
        if humanoid.FloorMaterial ~= Enum.Material.Air then return end
        -- падает быстрее, чем можно с планером
        if root.AssemblyLinearVelocity.Y < -FALL_SPEED then
            -- летим туда, куда смотрим
            local forward = root.CFrame.LookVector * GLIDE_SPEED
            -- медленно снижаемся и летим вперёд
            root.AssemblyLinearVelocity = Vector3.new(forward.X, -FALL_SPEED, forward.Z)
        -- конец проверки
        end
    -- конец обработчика
    end)
-- конец функции
end
-- каждый раз, когда берут в руки
tool.Equipped:Connect(OnEquipped)
-- подобрали с земли: скрипт запустился уже в руках — Equipped был раньше
if tool.Parent and tool.Parent:FindFirstChildOfClass("Humanoid") then OnEquipped() end
-- убрали планер
tool.Unequipped:Connect(function()
    -- больше не планируем
    if connection then connection:Disconnect() end
    -- забыли
    connection = nil
-- конец обработчика
end)

Проверка

Запусти Play (или Run) и убедись:

Собрать планер одной командой