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)
Где: 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) и убедись: