# Язык программирования Roblox: Luau и Lua в Роблокс

> Roblox Lua и язык программирования Luau в Роблокс Studio: Script, LocalScript, ModuleScript, основные API, первые скрипты и практика для начинающих с нуля.

Source: https://codims.ru/stati/yazyk-lua-v-roblox/

---

## Lua и Luau: основные различия

Игровой движок Roblox создан на C++, а логику игр и скрипты пишут на Lua. Точнее, на его диалекте Luau: именно под ним обычно и имеют в виду «Lua для платформы». Этот язык используется в Roblox для всех скриптов. Типы (string, number, boolean прямо в объявлении), дженерики и оптимизации делают его удобнее классического языка для игрового движка, который используется в Roblox. Синтаксис совместим с версией 5.1, поэтому примеры из обычных руководств подходят и здесь.

Новичку разница между Lua и Luau почти не важна: начните со стандартного Lua и простых скриптов, а особенности Luau изучите по ходу. Редактор Roblox Studio поддерживает оба варианта. Язык Luau одинаково работает на сервере и на клиенте, а примеры в статье пишутся на том же языке — это scripting в чистом виде.

Разработку делят на две части: сборку сцены из готовых деталей и scripting — написание скриптов, которые задают объектам поведение. Эта статья про скрипты: с каких конструкций начать, чтобы объекты в игре двигались, реагировали на игрока и хранили данные. Основы программирования и сам язык в Roblox Studio важнее знания всех команд.

Lua читается легко: скрипты на нём пишутся быстро, и первые объекты в игре начинают двигаться уже на первом занятии. Luau — версия языка с удобными типами, а видно это сразу: ошибки подсвечиваются ещё до запуска. Языком для скриптов служит Luau, а сцену собирают в Roblox Studio. Языки семейства Lua похожи, поэтому, разобравшись в одном, легко понять другой. Синтаксис языка осваивают быстро: одна команда — одна мысль. Программированию удобно учиться по шагам, а главное — понимать, что решает сам язык, а не редактор.

## Где писать скрипты и базовый синтаксис

Скрипты пишут прямо во встроенном редакторе: в панели Explorer выбирают объект — например, ServerScriptService, — правой кнопкой Insert Object → Script, и открывают код. Отдельную программу ставить не нужно. Roblox Studio скачивается бесплатно с официального сайта: запуск игры для проверки уже встроен, поэтому не придётся ни платить, ни устанавливать отдельный компилятор. Если редактора ещё нет на компьютере — разбор, [как установить Roblox Studio](/stati/roblox-studio-nachalo/) и настроить его с нуля, есть в отдельной статье.

Синтаксис языка короткий: переменную объявляют словом `local`, а тип Luau определяет сам по значению. Roblox Studio сам подскажет тип, писать его вручную не нужно.

local playerName = "Steve"  -- строка
local score = 0             -- число
local isReady = true        -- логический тип

print(playerName .. " готов: " .. tostring(isReady))

В Luau тип можно указать явно — `local score: number = 0` — тогда Roblox Studio подсветит ошибку, если в переменную попадёт значение не того типа. Для первых скриптов это не обязательно, но упрощает поиск опечаток в больших проектах Luau и в самом scripting. Знакомство с типами — часть разработки на Luau. Язык Luau подсказывает типы прямо в Roblox Studio, а в больших проектах используется тот же подход.

try { var k = 'codims\_bridge\_ab', v = localStorage.getItem(k); if (v !== 'project' && v !== 'tv') { v = Math.random() < 0.5 ? 'project' : 'tv'; localStorage.setItem(k, v); } document.documentElement.setAttribute('data-bridge', v); } catch (e) {}

Зарабатывает в Roblox тот, кто делает игры, а не только играет. Этому учат на курсе Roblox Studio.

Проект ученика · Unity

3D-игра «Лабиринт призраков»

Шутер с противниками, физикой и системой жизней. Ученик 14 лет, 8 месяцев.

[![Дарья Афанасьева в эфире ОТР](/videos/kiberbezopasnost/02-kiberbezopasnost-h.jpg)ОТР · «Родительское собрание»Дарья Афанасьева — об ИИ и кибербезопасности в школе](/tv/)[Курс Roblox Studio — пробный урок 500 ₽](/courses/roblox/)

## Script, LocalScript, ModuleScript: зачем три типа

-   **Script** — выполняется на сервере. Видит всех игроков в Roblox, управляет игровой логикой, хранит данные. Кладётся в ServerScriptService. _Пример: начисление очков, управление волнами врагов_
-   **LocalScript** — выполняется на клиенте (у каждого игрока своя копия). Обрабатывает ввод, анимации интерфейса. Кладётся в StarterPlayerScripts или StarterCharacterScripts. _Пример: кнопки UI, обработка нажатий клавиш_
-   **ModuleScript** — библиотека функций, которую вызывают другие скрипты. Кладётся в ReplicatedStorage. _Пример: общие функции расчёта урона, работа с данными_

Все три типа скриптов пишутся на Luau, но в проекте каждый из них работает по-своему. Script отвечает за сервер, LocalScript — за то, что видит игрок, ModuleScript — за общие функции. Код у них один и тот же, меняется место и роль.

## Часто используемые API

Ниже — API, которые чаще всего встречаются в скриптах Roblox. Это и есть язык программирования Luau в действии.

\-- Получить игрока
local player = game:GetService("Players").LocalPlayer


-- Получить объект по имени
local part = workspace:FindFirstChild("MyPart")

-- Изменить свойство
part.BrickColor = BrickColor.new("Bright red")
part.Transparency = 0.5

-- Уничтожить объект
part:Destroy()

-- Создать копию объекта
local clone = part:Clone()
clone.Parent = workspace

-- Событие
part.Touched:Connect(function(hit)
    local character = hit.Parent
    local hum = character:FindFirstChild("Humanoid")
    if hum then
        hum.Health -= 10  -- урон
    end
end)

## RemoteEvents: сервер ↔ клиент

Для многопользовательских игр основа программирования — скрипты на сервере и клиенте, которые общаются через RemoteEvents на Luau:

\-- LocalScript: игрок нажал кнопку "Купить"
local buyEvent = game.ReplicatedStorage:WaitForChild("BuyItem")
buyEvent:FireServer("sword")

-- Script: сервер получил запрос
buyEvent.OnServerEvent:Connect(function(player, item)
    if player.leaderstats.Coins.Value >= 50 then
        player.leaderstats.Coins.Value -= 50
        -- выдать предмет
    end
end)

Это критически важный паттерн — без него невозможно сделать честную многопользовательскую игру. Все денежные операции должны проверяться на сервере!

Похожим образом через LocalScript управляют элементами интерфейса — например, обновляют текст на экране игрока. Разбор с примерами скриптов — в статье [как сделать надпись или табличку в редакторе](/stati/kak-sdelat-v-roblox-studio/).

Синтаксис и события задают логику, но ими проект не ограничивается: нужна ещё карта, идея и публикация. Полный путь от пустой сцены до готовой игры, с местом Lua на каждом шаге, — в статье [как создать игру на платформе](/stati/kak-sozdat-igru-v-roblox/).

## DataStore: сохраняем прогресс между сессиями

Без сохранения данных игра забывает всё, что накопил игрок: монеты, уровень, купленные предметы. Для постоянного хранения в Luau платформа Roblox предоставляет DataStoreService. Он сохраняет данные между сессиями игрока и между разными серверами одной игры.

local DataStoreService = game:GetService("DataStoreService")
local coinsStore = DataStoreService:GetDataStore("PlayerCoins")

-- Сохранить при выходе игрока
game.Players.PlayerRemoving:Connect(function(player)
    local success, err = pcall(function()
        coinsStore:SetAsync(player.UserId, player.leaderstats.Coins.Value)
    end)
end)

Обёртка `pcall` в Luau здесь не формальность: DataStore иногда отвечает с задержкой или ошибкой, и без обработки такой ошибки игра может вылететь у игрока в неподходящий момент — например, прямо во время сохранения его прогресса. Разбор ошибок такого рода — отдельный, но важный навык, который на курсе отрабатывают на практике, а не только в теории.

## С чего начинать и сколько времени это займёт

Основы Lua можно освоить за одно занятие: первый скрипт, который двигает объект по нажатию клавиши, реально написать в первый день, а результат виден сразу в Roblox Studio. Разница между Script, LocalScript и ModuleScript, события вроде Touched и первые RemoteEvents требуют нескольких недель регулярных занятий. DataStore и защита от читерства на сервере — тема для следующего этапа.

Освоить основы языка Lua и работу с ним проще всего с малого: понятный цикл и один блок кода уже двигают объект. Дальше появляются новые задачи, а выбор остаётся за учеником: любой жанр подойдёт, писать код можно для платформера, гонки или симулятора. Обучение подростков строится так, чтобы создавать игры и дальше создавать собственные проекты, а создание игр Roblox помогает сразу видеть результат.

На занятиях в школе #АйДаКодить этот путь проходят пошагово: сначала синтаксис и простые скрипты, затем события и типы скриптов, потом системы вроде очков и покупок с DataStore, и в конце — сборка всех механик в цельную игру с публикацией в магазине платформы. Работа идёт в мини-группах до 6 человек или индивидуально онлайн, а формат не меняет программу — итогом становится собственная опубликованная игра, а не набор разрозненных примеров.

## Типичные ошибки новичков в Luau

Самая частая ошибка новичков в Roblox — писать в LocalScript всю игровую логику, включая проверку покупок и начисление очков. Так проще: LocalScript ближе к интерфейсу, и результат виден сразу. Но такой код открыт для изменения на стороне игрока: читер может подделать локальные переменные и получить бесконечные монеты. Всё, где на кону честность игры, должно выполняться в Script на сервере, а LocalScript только показывает результат. Чтобы писать код и создавать собственные игры, достаточно взять понятный пример и разбирать один блок за раз: новые задачи появляются постепенно, а выбор жанра остаётся за автором. В процессе обучения инструкция и инструменты доступны внутри редактора, а с помощью подсказок ученик находит решения и получает доступ к нужному разделу.

Вторая типичная проблема — забыть про `WaitForChild` там, где объект может ещё не успеть загрузиться. Из-за этого скрипт иногда работает на медленном интернете и падает на быстром, или наоборот. Такие ошибки искать сложнее очевидных опечаток.

Ещё одна частая привычка — писать один огромный скрипт вместо нескольких небольших модулей. Пока игра простая, это не мешает. Но когда механик становится больше десяти, найти нужный код в тысяче строк одного файла сложно, а в аккуратных ModuleScript — легко. Разделение кода на модули — не формальность для больших проектов, а рабочая привычка с первого дня.

Начинающим полезно сразу привыкать к этим правилам программирования, а не переучиваться позже, когда игра выросла из одного файла. На занятиях педагог показывает разделение серверной и клиентской логики и объясняет его смысл: так появляются рабочие привычки программирования, а не только знание отдельных команд Luau.

Курс для детей

### Игровой редактор — Lua на практике

Ребята 10–16 лет осваивают разработку на Luau через создание реальных игр. Script/LocalScript, RemoteEvents, DataStore — всё на практических проектах.

[Подробнее о курсе](/courses/roblox/)

Зарабатывает в Roblox тот, кто делает игры, а не только играет. Этому учат на курсе Roblox Studio.

Проект ученика · Unity

3D-игра «Лабиринт призраков»

Шутер с противниками, физикой и системой жизней. Ученик 14 лет, 8 месяцев.

[![Дарья Афанасьева в эфире ОТР](/videos/kiberbezopasnost/02-kiberbezopasnost-h.jpg)ОТР · «Родительское собрание»Дарья Афанасьева — об ИИ и кибербезопасности в школе](/tv/)[Курс Roblox Studio — пробный урок 500 ₽](/courses/roblox/)
