Roblox · Движение

Рывок на Q

Q — короткий рывок туда, куда идёшь (или вперёд, если стоишь). Откат 1,2 секунды. Замороженный персонаж рвануться не может.

Структура

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

StarterPlayer
└─ StarterPlayerScripts
   └─ DashLocal (LocalScript)

Шаги

  1. StarterPlayer → StarterPlayerScripts → «+» → LocalScript, переименуй в DashLocal, вставь текст DashLocal из «Скриптов».
  2. Сервер не нужен: физику своего персонажа считает его компьютер, толчок LinearVelocity виден всем.
  3. Рывок не меняет WalkSpeed, поэтому с модулем эффектов не спорит; но проверяет заморозку (WalkSpeed = 0).
  4. Клавиша назначается через ContextActionService: на телефоне для неё сама появляется кнопка на экране.
  5. Настройка — числа в начале скрипта: DASH_SPEED (дальность), DASH_TIME, COOLDOWN.

Скрипты

DashLocal

Где: StarterPlayer → StarterPlayerScripts · LocalScript
Зачем: Q — рывок по направлению движения с откатом.

-- клавиши и кнопки на телефоне
local CAS = game:GetService("ContextActionService")
-- удаление по таймеру
local Debris = game:GetService("Debris")
-- этот игрок
local player = game.Players.LocalPlayer
-- скорость рывка
local DASH_SPEED = 70
-- длительность рывка в секундах
local DASH_TIME = 0.15
-- секунд до следующего рывка
local COOLDOWN = 1.2
-- время прошлого рывка
local lastDash = 0

-- клавиша Q (на телефоне — кнопка «Рывок»)
CAS:BindAction("Dash", function(_, state)
    -- реагируем только на нажатие
    if state ~= Enum.UserInputState.Begin 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
    -- заморожен — рывка нет
    if humanoid.WalkSpeed == 0 then return end
    -- откат ещё не прошёл
    if os.clock() - lastDash < COOLDOWN then return end
    -- запоминаем
    lastDash = os.clock()
    -- куда идёт игрок
    local dir = humanoid.MoveDirection
    -- стоит — рывок вперёд, куда смотрит
    if dir.Magnitude < 0.1 then dir = root.CFrame.LookVector end
    -- только по земле
    local flat = dir * Vector3.new(1, 0, 1)
    -- направления нет
    if flat.Magnitude < 0.1 then return end
    -- точка приложения
    local attachment = Instance.new("Attachment")
    -- в центр персонажа
    attachment.Parent = root
    -- толчок; физику своего персонажа считает его компьютер — работает и без сервера
    local push = Instance.new("LinearVelocity")
    -- куда приложен
    push.Attachment0 = attachment
    -- без ограничения силы
    push.MaxForce = math.huge
    -- вперёд с нужной скоростью
    push.VectorVelocity = flat.Unit * DASH_SPEED
    -- толкаем
    push.Parent = root
    -- рывок короткий
    Debris:AddItem(push, DASH_TIME)
    -- убираем и точку
    Debris:AddItem(attachment, DASH_TIME)
-- true — кнопка на телефоне
end, true, Enum.KeyCode.Q)
-- надпись на кнопке
CAS:SetTitle("Dash", "Рывок")

Проверка

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

Собрать рывок одной командой