Roblox · Аркада · урок 4

Мобильная версия и публикация

На телефоне нет мыши и пробела: появляется большая кнопка «Огонь» справа внизу, персонаж стреляет туда, куда смотрит, а смотрит — куда идёт. И публикация.

Структура

Синим — что добавляем на этом уроке.

StarterPlayer → StarterCharacterScripts
└─ FireLocal (LocalScript) — обновлён: кнопка «Огонь»

Шаги

  1. ContextActionService:BindAction(..., true, ...) — третий аргумент true создаёт кнопку на сенсорном экране. На ПК её нет — ничего мешать не будет.
  2. SetTitle — надпись, SetPosition — место (под большой палец), GetButton — сама кнопка, можно сделать крупнее.
  3. AimLocal на телефоне включает AutoRotate: персонаж смотрит по ходу движения (джойстик слева), FireLocal стреляет вперёд.
  4. Проверка в Studio: Test → Device — выбери телефон (например, iPhone). Мышь работает как палец.
  5. Публикация: File → Publish to Roblox; на сайте Creations → игра → Public. Не забудь иконку и обложку.

Скрипты

FireLocal

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