Основы скриптинга в Roblox на языке Lua

Этот курс предназначен для начинающих разработчиков, желающих освоить программирование игр в Roblox Studio. Вы изучите синтаксис Lua, работу с игровым движком и основы создания мультиплеерных механик.

1. Введение в Roblox Studio и базовый синтаксис Lua

Введение в Roblox Studio и базовый синтаксис Lua

Добро пожаловать в курс «Основы скриптинга в Roblox на языке Lua». Если вы читаете эту статью, значит, вы решили перейти от простой игры в Roblox к созданию собственных миров. Это захватывающий путь, который начинается с понимания инструментов и языка, на котором «разговаривает» эта платформа.

В этой первой статье мы разберем фундамент: как устроен редактор Roblox Studio и как написать свой первый код на языке Lua.

Что такое Roblox Studio и Lua?

Roblox Studio — это движок, на котором создаются все плейсы (игры) в Roblox. Это ваша мастерская, где вы строите уровни, настраиваете освещение и, самое главное, пишете скрипты.

Lua (точнее, его модификация Luau, используемая в Roblox) — это легкий, быстрый и понятный язык программирования. Он был создан в Бразилии (Lua переводится как «Луна» с португальского) и идеально подходит для начинающих. Скриптинг в Roblox — это процесс написания инструкций на Lua, которые заставляют объекты в игре двигаться, изменяться и реагировать на действия игрока.

Знакомство с интерфейсом Roblox Studio

Прежде чем писать код, нужно понять, где мы находимся. Откройте Roblox Studio и создайте новый проект, выбрав шаблон Baseplate (пустая плита).

!Схема интерфейса Roblox Studio с акцентом на Explorer, Properties и Output.

Для скриптинга нам критически важны три окна. Если вы их не видите, перейдите во вкладку View (Вид) в верхней панели и включите их:

  • Explorer (Проводник)
  • Это иерархическое дерево вашего проекта. Здесь отображаются все объекты: детали, звуки, свет и скрипты. Представьте, что это оглавление книги или папки на вашем компьютере. Все, что есть в вашей игре, находится здесь.

  • Properties (Свойства)
  • Это окно показывает настройки выбранного объекта. Если вы выберете деталь в Explorer, в Properties вы сможете изменить её цвет, прозрачность, размер или материал. Скрипты тоже имеют свойства, но чаще мы будем менять свойства других объектов через скрипты.

  • Output (Вывод)
  • Это консоль отладки. Самый важный инструмент программиста. Сюда выводятся сообщения об ошибках (красным текстом) и сообщения, которые мы сами попросим программу написать (например, для проверки работоспособности кода).

    Ваш первый скрипт

    Давайте напишем первую программу. В программировании принято начинать с вывода фразы «Hello, World!», но мы поздороваемся с миром Roblox.

  • В окне Explorer найдите папку ServerScriptService.
  • Наведите на неё курсор, нажмите на + и выберите Script.
  • Откроется редактор кода.
  • По умолчанию там уже будет написана строка:

    Давайте разберем, что это значит.

    * print — это встроенная функция. Функция — это команда, которая выполняет определенное действие. В данном случае действие — «напечатать текст в консоль». () — круглые скобки указывают на вызов функции. Внутри скобок мы передаем то, что* именно нужно напечатать. * "Hello world!" — это текст (строка). В Lua текст всегда должен быть обернут в кавычки (двойные " или одинарные ').

    Нажмите кнопку Play (или F5) в верхней панели. Посмотрите в окно Output (внизу экрана). Вы увидите надпись:

    > Hello world!

    Поздравляю! Вы запустили свой первый скрипт.

    Переменные: Коробки для данных

    Одна из самых фундаментальных концепций в программировании — это переменная. Представьте переменную как коробку, на которой вы написали название маркером, и в которую положили какой-то предмет.

    В Lua переменные создаются с помощью ключевого слова local.

    Синтаксис выглядит так:

    Разберем эту строку по частям: * local — команда, говорящая компьютеру: «Создай новую локальную переменную». * myName — имя переменной (название на коробке). Вы придумываете его сами. Имя не должно начинаться с цифры и не должно содержать пробелов. * = — знак присваивания. Это не математическое равенство. Это команда: «Положи то, что справа, в коробку, которая слева». * "Alex" — значение (содержимое коробки).

    Теперь мы можем использовать эту переменную в функции print:

    В окне Output появится: Привет, Роблокс!. Компьютер нашел коробку с именем message, заглянул внутрь, достал текст и напечатал его.

    Почему local?

    В Lua можно создавать переменные и без слова local (глобальные переменные), но в 99% случаев в Roblox нужно использовать именно local. Это делает скрипт быстрее и предотвращает ошибки, когда разные скрипты случайно перезаписывают данные друг друга.

    Типы данных

    В наши «коробки» (переменные) можно класть разные типы данных. Вот основные, которые вам понадобятся в начале:

    1. Строки (String)

    Это любой текст. Строки всегда пишутся в кавычках.

    2. Числа (Number)

    Это обычные числа. Они пишутся без кавычек. Если вы поставите кавычки вокруг цифры, компьютер будет считать это текстом, а не числом, и вы не сможете производить с ним математические операции.

    3. Булевы значения (Boolean)

    Это логический тип данных. Он может иметь только два значения: «Истина» или «Ложь». Это используется для переключателей (например, включен ли свет, жив ли игрок).

    4. Nil

    Это особый тип данных, означающий «ничего» или «пустота». Если переменная не имеет значения, она равна nil.

    Комментарии

    Иногда вам нужно оставить заметку в коде для себя или других разработчиков. Компьютер должен игнорировать эти заметки при выполнении программы. Это называется комментарии.

    В Lua комментарии начинаются с двух дефисов --.

    Базовая арифметика

    Lua отлично справляется с математикой. Вы можете использовать стандартные операторы:

    * + (Сложение) * - (Вычитание) (Умножение) * / (Деление)

    Пример использования в коде:

    Вы также можете изменять значение переменной, используя её текущее значение:

    Объединение строк (Конкатенация)

    Если вам нужно склеить две строки в одну, в Lua используется оператор .. (две точки).

    Обратите внимание, что я добавил пробел после запятой в слове "Привет, ", чтобы слова не слиплись.

    Заключение

    Сегодня вы сделали первый шаг в мир скриптинга Roblox. Мы изучили:

  • Где писать код (окно Script).
  • Где смотреть результат (окно Output).
  • Как создавать переменные (local).
  • Какие бывают данные (строки, числа, булевы значения).
  • Как выполнять простые действия с ними.
  • В следующей статье мы перейдем к более интересной части: мы научимся обращаться к игровым объектам, менять их цвет и прозрачность прямо из кода, изучив иерархию «Родитель-Потомок».

    Экспериментируйте с print и арифметикой, чтобы закрепить материал!

    2. Манипуляция объектами, работа со свойствами и событиями

    Манипуляция объектами, работа со свойствами и событиями

    В предыдущей статье мы научились писать «Hello World» и создавать переменные. Это отличный старт, но вы здесь не для того, чтобы писать текст в консоль, верно? Вы хотите, чтобы двери открывались, платформы двигались, а лава наносила урон.

    Сегодня мы переходим к самому интересному: мы научимся обращаться к объектам в игровом мире, менять их внешний вид через код и заставим их реагировать на прикосновения. Мы превратим статичный мир в интерактивный.

    Иерархия: Дерево игры

    Чтобы управлять объектом, скрипт должен знать, где этот объект находится. В Roblox все объекты организованы в строгую структуру, похожую на папки в компьютере или генеалогическое древо. Эта структура называется Иерархией.

    !Структура иерархии: Игра -> Рабочее пространство -> Деталь.

    Родители и Дети (Parent and Child)

    В Roblox используются термины «Родитель» (Parent) и «Потомок» или «Ребенок» (Child).

    * Parent (Родитель) — это объект, внутри которого находится наш объект. * Child (Потомок) — это объект, который находится внутри другого.

    Например, если вы создали деталь (Part) и положили её в Workspace (Рабочее пространство), то: * Workspace — это Parent для детали. * Part — это Child для Workspace.

    Самый главный объект, в котором находится абсолютно всё, называется game.

    Адресация: Как найти объект скриптом

    Чтобы изменить деталь, мы должны указать скрипту полный путь к ней. Это похоже на почтовый адрес: Страна -> Город -> Улица -> Дом.

    Допустим, у нас есть деталь с именем SuperPart, лежащая прямо в игровом мире (Workspace).

    Абсолютный путь

    Мы начинаем с самого верха — с game.

    Здесь точки . работают как слэши / в адресе сайта. Мы «спускаемся» по дереву иерархии.

    Относительный путь (script.Parent)

    Чаще всего скрипт кладут внутрь той детали, которой он должен управлять. Это очень удобно. Если скрипт лежит внутри детали, то деталь является Родителем для скрипта.

    Мы можем обратиться к ней так:

    script — это ключевое слово, обозначающее «этот самый скрипт, который сейчас выполняется». script.Parent означает «объект, в котором лежит этот скрипт».

    > Это лучший способ обращения к объекту, если скрипт является его частью. Если вы скопируете деталь вместе со скриптом, код продолжит работать, так как он ссылается на своего «родителя», а не ищет деталь по конкретному имени.

    Свойства: Изменяем реальность

    У каждого объекта есть Свойства (Properties). Вы видели их в окне Properties в Roblox Studio: цвет, прозрачность, материал, позиция. Все эти свойства можно менять через код.

    Давайте рассмотрим самые популярные свойства для детали (Part).

    1. Transparency (Прозрачность)

    Это число от 0 до 1. * 0 — полностью видимый. * 1 — полностью невидимый. * 0.5 — полупрозрачный (как стекло).

    2. Anchored (Якорь)

    Это булево значение (true или false). Если true, деталь застывает в пространстве и не падает под действием гравитации, даже если её толкнуть.

    3. CanCollide (Столкновение)

    Тоже булево значение. Если false, сквозь деталь можно проходить, как через призрака.

    Сложные типы данных

    Некоторые свойства нельзя описать просто числом или текстом. Для них в Roblox есть специальные типы данных.

    BrickColor (Цвет из палитры)

    В Roblox есть встроенная палитра цветов с названиями. Чтобы изменить цвет, мы создаем новый BrickColor.

    Color3 (RGB Цвет)

    Если вам нужен точный оттенок, используется Color3. Это смесь Красного (Red), Зеленого (Green) и Синего (Blue). Значения указываются от 0 до 1 (или от 0 до 255 через специальный конструктор).

    Vector3 (Позиция и Размер)

    Мы живем в трехмерном мире. Чтобы описать позицию или размер, нам нужны три координаты: , и . В Roblox для этого используется тип данных Vector3.

    !Оси координат в Roblox: X - вправо/влево, Y - вверх/вниз, Z - вперед/назад.

    Если мы хотим изменить размер детали:

    Если мы хотим переместить деталь:

    Функция task.wait()

    Код выполняется мгновенно. Если вы напишете:

    ...вы не увидите изменений, потому что деталь станет прозрачной через миллисекунду после того, как стала видимой. Чтобы увидеть процесс, нужно попросить скрипт подождать.

    Для этого используется команда task.wait(секунды).

    События: Реакция на действия

    До этого момента наш код выполнялся сразу после запуска игры. Но в играх действия происходят по ситуации: когда игрок нажал кнопку, когда коснулся монетки, когда зашел в зону.

    Для этого в Lua используются События (Events).

    Событие — это сигнал, который объект подает, когда с ним что-то происходит. Самое популярное событие для детали — Touched (Коснулся).

    Связь события и функции

    Чтобы скрипт среагировал на событие, мы должны «подключить» (Connect) к этому событию функцию.

    Схема выглядит так: Объект.Событие:Connect(Функция)

    Давайте напишем скрипт, который делает деталь прозрачной, когда кто-то её касается.

  • Создайте деталь.
  • Добавьте внутрь скрипт.
  • Напишите следующий код:
  • Обратите внимание: в последней строке мы пишем onTouch без скобок. Мы не вызываем функцию прямо сейчас, мы просто передаем её имя, говоря: «Запусти эту функцию, когда произойдет касание».

    Практика: Создание «Убивающего блока» (Kill Brick)

    Давайте создадим классический элемент любого обби (полосы препятствий) — красную деталь, которая убивает игрока при касании.

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

    У персонажа игрока есть объект Humanoid (Гуманоид), который отвечает за здоровье (Health).

    Вот полный код:

    Разбор логики:

  • Событие Touched срабатывает и запускает killPlayer.
  • В переменную otherPart попадает, например, LeftLeg (Левая нога).
  • otherPart.Parent — это модель персонажа (например, Player1).
  • Мы проверяем, есть ли у этой модели Humanoid. Ведь коснуться ловушки мог не игрок, а мячик или другая деталь. У мячика нет здоровья, поэтому скрипт должен проверить это, чтобы не выдать ошибку.
  • Если Humanoid есть, мы ставим Health = 0.
  • Заключение

    Сегодня вы сделали огромный шаг вперед. Вы перешли от теории к практике создания игровых механик. Вы узнали: * Как устроена иерархия (Parent/Child). * Как менять свойства (Transparency, Color, CanCollide). * Что такое типы данных Vector3 и BrickColor. * Как использовать события (Touched) для реакции на действия игрока.

    В следующей статье мы углубимся в логику программирования: изучим условные операторы if/then/else более подробно и научимся создавать циклы, чтобы заставить объекты двигаться постоянно.