Roblox · Интерфейсы

Иконка способности с перезарядкой

Квадратная иконка способности: Q или касание — рывок вперёд, иконка темнеет и заливка опускается вниз, пока идёт перезарядка, сверху — секунды до готовности.

Структура

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

StarterGui
└─ AbilityGui (ScreenGui) — ResetOnSpawn выкл.
   ├─ DashButton (TextButton) — «Рывок Q», ClipsDescendants вкл.
   │  ├─ UIAspectRatioConstraint (UIAspectRatioConstraint) — квадрат
   │  ├─ Cooldown (Frame) — AnchorPoint 0, 1; Position {0,0},{1,0}; Size {1,0},{0,0}
   │  └─ Timer (TextLabel) — ZIndex 3
   └─ AbilityLocal (LocalScript)

Шаги

  1. StarterGui → ScreenGui «AbilityGui» → TextButton «DashButton» внизу справа от центра, текст «Рывок» и «Q». ClipsDescendants вкл., внутри UIAspectRatioConstraint — всегда квадрат.
  2. В кнопке Frame «Cooldown»: чёрный, BackgroundTransparency 0.4, ZIndex 2, AnchorPoint 0, 1, Position {0,0},{1,0}, Size {1,0},{0,0}. AnchorPoint снизу — заливка уменьшается к низу.
  3. TextLabel «Timer» во всю кнопку, ZIndex 3 — поверх заливки.
  4. LocalScript «AbilityLocal»: рывок — LinearVelocity на 0.2 секунды. Своего персонажа игрок двигает сам, сервер увидит.
  5. Своя способность вместо рывка — поменяй содержимое Dash после строки ready = false. COOLDOWN и KEY — в начале скрипта.

Скрипты

AbilityLocal

Где: StarterGui → AbilityGui · LocalScript
Зачем: Рывок и перезарядка.

-- игроки
local Players = game:GetService("Players")
-- клавиатура
local UIS = game:GetService("UserInputService")
-- заливка перезарядки
local TweenService = game:GetService("TweenService")
-- удаляет через время
local Debris = game:GetService("Debris")
-- этот игрок
local player = Players.LocalPlayer
-- иконка способности
local button = script.Parent:WaitForChild("DashButton")
-- тёмная заливка
local shade = button:WaitForChild("Cooldown")
-- секунды до готовности
local timer = button:WaitForChild("Timer")
-- клавиша
local KEY = Enum.KeyCode.Q
-- перезарядка, секунд
local COOLDOWN = 3
-- сила рывка
local POWER = 60
-- можно использовать
local ready = true

-- рывок
local function Dash()
    -- ещё перезаряжается
    if not ready then return end
    -- персонаж
    local character = player.Character
    -- Humanoid
    local humanoid = character and character:FindFirstChildOfClass("Humanoid")
    -- центр
    local root = character and character:FindFirstChild("HumanoidRootPart")
    -- нет персонажа или погиб
    if not humanoid or not root or humanoid.Health <= 0 then return end
    -- перезарядка началась
    ready = false
    -- куда идём, а стоя — куда смотрим
    local direction = humanoid.MoveDirection.Magnitude > 0 and humanoid.MoveDirection or root.CFrame.LookVector
    -- точка приложения силы
    local attachment = root:FindFirstChild("RootAttachment") or Instance.new("Attachment", root)
    -- толчок
    local push = Instance.new("LinearVelocity")
    -- за центр
    push.Attachment0 = attachment
    -- сильный
    push.MaxForce = 100000
    -- скорость рывка
    push.VectorVelocity = direction * POWER
    -- в персонажа — своего игрок двигает сам
    push.Parent = root
    -- толкает 0.2 секунды
    Debris:AddItem(push, 0.2)
    -- иконка затемнена целиком
    shade.Size = UDim2.fromScale(1, 1)
    -- заливка опускается за время перезарядки
    TweenService:Create(shade, TweenInfo.new(COOLDOWN, Enum.EasingStyle.Linear), {Size = UDim2.fromScale(1, 0)}):Play()
    -- обратный отсчёт
    for left = COOLDOWN, 1, -1 do
        -- 3, 2, 1
        timer.Text = tostring(left)
        -- секунда
        task.wait(1)
    -- конец цикла
    end
    -- готово
    timer.Text = ""
    -- можно снова
    ready = true
-- конец функции
end

-- нажали клавишу
UIS.InputBegan:Connect(function(input, processed)
    -- Q — рывок
    if not processed and input.KeyCode == KEY then Dash() end
-- конец функции
end)
-- клик или касание иконки — тоже рывок
button.Activated:Connect(Dash)

Проверка

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

Собрать иконку способности одной командой