Roblox · Аркада · урок 4
На телефоне нет мыши и пробела: появляется большая кнопка «Огонь» справа внизу, персонаж стреляет туда, куда смотрит, а смотрит — куда идёт. И публикация.
Синим — что добавляем на этом уроке.
StarterPlayer → StarterCharacterScripts └─ FireLocal (LocalScript) — обновлён: кнопка «Огонь»
Где: StarterPlayer → StarterCharacterScripts · LocalScript
Зачем: Огонь + кнопка для телефона.
-- клавиши и кнопки для телефона
local CAS = game:GetService("ContextActionService")
-- есть ли мышь
local UIS = game:GetService("UserInputService")
-- события
local RS = game:GetService("ReplicatedStorage")
-- игроки
local Players = game:GetService("Players")
-- выстрел клиент → сервер
local fireEvent = RS:WaitForChild("FireEvent")
-- персонаж
local character = script.Parent
-- центр
local root = character:WaitForChild("HumanoidRootPart")
-- курсор
local mouse = Players.LocalPlayer:GetMouse()
-- секунд между выстрелами
local RATE = 0.2
-- зажата кнопка огня
local holding = false
-- куда стрелять
local function Target()
-- телефон — вперёд
if UIS.TouchEnabled and not UIS.MouseEnabled then return root.Position + root.CFrame.LookVector * 50 end
-- мышь — в курсор
return mouse.Hit.Position
-- конец функции
end
-- нажали или отпустили
local function OnFire(_, state)
-- зажата?
holding = state == Enum.UserInputState.Begin
-- пробел больше не прыжок
return Enum.ContextActionResult.Sink
-- конец функции
end
-- ЛКМ, пробел, курок геймпада; true — кнопка на телефоне
CAS:BindAction("Fire", OnFire, true, Enum.UserInputType.MouseButton1, Enum.KeyCode.Space, Enum.KeyCode.ButtonR2)
-- надпись на кнопке телефона
CAS:SetTitle("Fire", "Огонь")
-- справа внизу, под большой палец
CAS:SetPosition("Fire", UDim2.new(1, -140, 1, -150))
-- сама кнопка (на ПК — nil)
local button = CAS:GetButton("Fire")
-- крупнее
if button then button.Size = UDim2.fromOffset(90, 90) end
-- погиб — кнопка пропадает
character:WaitForChild("Humanoid").Died:Connect(function() CAS:UnbindAction("Fire") end)
-- пока персонаж жив
while character.Parent do
-- зажато — стреляем очередью
if holding then fireEvent:FireServer(Target()) end
-- пауза
task.wait(RATE)
-- конец цикла
endЗапусти Play (или Run) и убедись: