Скрипты в Роблокс Студио: первые программы на Lua

Без рубрики5 минут чтения

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

На каком языке пишут скрипты в Роблоксе

Игры в Роблоксе программируют на Lua — точнее, на его версии Luau, которую Roblox развивает специально для своей платформы. Lua — простой и понятный язык: в нём мало служебных символов, а команды похожи на английские слова. Поэтому его часто выбирают как первый «настоящий» язык после Scratch.

Какие бывают скрипты

  • Script — обычный скрипт. Работает на сервере и управляет игрой для всех игроков: ловушками, монетками, очками.
  • LocalScript — работает на компьютере конкретного игрока. Нужен для управления, камеры, кнопок на экране.
  • ModuleScript — «библиотека»: код, который используют несколько других скриптов.

Для начала нам хватит обычного Script.

Как добавить скрипт

  1. Откройте окно Explorer — список объектов игры.
  2. Наведите на нужный объект (например, на деталь) и нажмите +.
  3. Выберите Script — откроется редактор кода.
  4. Откройте окно Output — в нём видно, что выводит программа и где ошибки. Если его нет, включите его в меню вида (View или Window).

Скрипты для всей игры обычно кладут в папку ServerScriptService, а скрипты конкретной детали — прямо внутрь этой детали.

Программа 1. «Привет, мир!»

Классика: первая программа просто выводит текст.

print("Привет, мир!")

Нажмите Play — в окне Output появится надпись. print — главный помощник программиста: с его помощью проверяют, дошла ли программа до нужного места.

Программа 2. Блок, который меняет цвет

Добавьте деталь, включите ей Anchored, вставьте внутрь скрипт:

local part = script.Parent

while true do
	part.BrickColor = BrickColor.random()
	task.wait(1)
end

Что здесь происходит:

  • script.Parent — объект, внутри которого лежит скрипт, то есть наша деталь;
  • while true do ... end — бесконечный цикл: всё внутри повторяется снова и снова;
  • BrickColor.random() — случайный цвет;
  • task.wait(1) — пауза в одну секунду. Без неё цикл крутился бы так быстро, что игра бы зависла.

Попробуйте поменять паузу на 0.2 — получится дискотека.

Программа 3. Лава

Ловушка, без которой не обходится ни одно обби. Красная деталь, скрипт внутри:

local lava = script.Parent

lava.Touched:Connect(function(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end)

Здесь появляется главное понятие программирования игр — событие. Touched срабатывает, когда кто-то касается детали. Connect говорит: «когда это случится, выполни вот эту функцию». Внутри мы проверяем условием if, что лавы коснулся персонаж (у персонажа есть Humanoid), и обнуляем ему здоровье.

Программа 4. Монетки и счёт

Сделаем, чтобы у игроков был счёт монет, который виден в таблице справа вверху.

Сначала скрипт в ServerScriptService — он создаёт счёт каждому новому игроку:

game.Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Value = 0
	coins.Parent = leaderstats
end)

Папка обязательно должна называться leaderstats — именно так Roblox понимает, что её нужно показать в таблице.

Теперь монетка: жёлтая деталь (Anchored включён, CanCollide можно выключить, чтобы сквозь неё проходили), внутри скрипт:

local coin = script.Parent
local collected = false

coin.Touched:Connect(function(hit)
	if collected then
		return
	end
	local player = game.Players:GetPlayerFromCharacter(hit.Parent)
	if player then
		collected = true
		player.leaderstats.Coins.Value += 1
		coin:Destroy()
	end
end)

Переменная collected нужна, чтобы монетку нельзя было собрать несколько раз за одно касание: событие Touched срабатывает от каждой части тела персонажа. Скопируйте монетку по всему уровню — и у вас уже настоящая игра на сбор предметов.

Программа 5. Дверь, которая открывается по клику

local door = script.Parent

local click = Instance.new("ClickDetector")
click.Parent = door

click.MouseClick:Connect(function()
	door.Transparency = 0.8
	door.CanCollide = false
	task.wait(3)
	door.Transparency = 0
	door.CanCollide = true
end)

По клику дверь становится почти прозрачной и пропускает игрока, а через три секунды закрывается снова. Если хотите, чтобы дверь плавно уезжала вверх, а не исчезала, — это делается анимацией, о ней статья «Анимация в Роблокс Студио».

Почему скрипт не работает: частые ошибки

  • Большие и маленькие буквы. Lua различает регистр: Humanoid и humanoid — разные вещи, Script.Parent вместо script.Parent не сработает.
  • Забыли end. Каждый function, if и while нужно закрыть словом end.
  • Скрипт не там. LocalScript, положенный в деталь, не запустится. Скрипт для детали кладите внутрь детали, общий скрипт — в ServerScriptService.
  • Не смотрите в Output. Красная строка в окне Output показывает, в какой строке и что пошло не так. Это первое, куда нужно смотреть.
  • Опечатка в имени. Если в коде написано Coins, а значение называется Coin, программа его не найдёт.

Что учить дальше

Когда эти программы получаются, следующий шаг — переменные и таблицы, функции, сервисы Roblox (Players, TweenService, UserInputService), передача данных между сервером и игроком и сохранение прогресса. На этом строятся тайкуны, симуляторы и магазины.

Если вы ещё не начинали, вернитесь к основам: как сделать свою игру в Роблокс Студио и где скачать Roblox Studio.

Научиться программировать игры с преподавателем

На курсе «Разработка игровых приложений в Roblox» в РОБОЛАТОРИИ ребята 10–14 лет за 14 занятий проходят путь от первой детали до собственной игры: паркур, тайкун, симулятор — всё с кодом на Lua, который пишут сами. Lua — хороший мостик к «взрослым» языкам: после него легче даются Python и C.

Узнать расписание и записаться — по телефону 8 (495) 120-30-60.

Комментарии

Онлайн-курсы для детей 7–16 лет

Программирование, робототехника и 3D с живым преподавателем. Первое занятие — пробное.

Выбрать курс