Скрипты в Роблокс Студио: первые программы на Lua
Построить уровень в Roblox Studio можно мышкой. Но всё, что делает игру игрой — ловушки, монетки, счёт, двери, магазины, — работает на скриптах. Скрипт — это небольшая программа, которая говорит объектам, что делать. В этой статье — пять первых программ, которые можно написать за один вечер, даже если раньше вы никогда не программировали.
На каком языке пишут скрипты в Роблоксе
Игры в Роблоксе программируют на Lua — точнее, на его версии Luau, которую Roblox развивает специально для своей платформы. Lua — простой и понятный язык: в нём мало служебных символов, а команды похожи на английские слова. Поэтому его часто выбирают как первый «настоящий» язык после Scratch.
Какие бывают скрипты
- Script — обычный скрипт. Работает на сервере и управляет игрой для всех игроков: ловушками, монетками, очками.
- LocalScript — работает на компьютере конкретного игрока. Нужен для управления, камеры, кнопок на экране.
- ModuleScript — «библиотека»: код, который используют несколько других скриптов.
Для начала нам хватит обычного Script.
Как добавить скрипт
- Откройте окно Explorer — список объектов игры.
- Наведите на нужный объект (например, на деталь) и нажмите +.
- Выберите Script — откроется редактор кода.
- Откройте окно 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.



Комментарии
Войдите, чтобы написать комментарий.