← Все уроки
Урок 1

Создай своё первое обби

Полоса препятствий с лавой, контрольными точками, исчезающей платформой и финишной линией.

Бесплатно45 минут · Для новичков · Roblox Studio
1
Шаг 1 / 10

Создай новое место

  1. Открой Roblox Studio и войди в аккаунт.
  2. Нажми New Experience и выбери шаблон Baseplate.
  3. Теперь у тебя есть плоский серый пол. На нём будет стоять твоя трасса.

Подробнее

  • Roblox Studio является бесплатной программой для Windows и Mac. Если она ещё не установлена, скачай её с create.roblox.com и войди в свой аккаунт Roblox.
  • Шаблон Baseplate есть в списке шаблонов на стартовом экране. Это тот, что показывает пустой серый пол.
  • Место открывается во вкладке. Название вкладки является названием твоего места.
  • На Mac каждый раз, когда в уроке написано Ctrl, нажимай клавишу Cmd.
Совет. Сохраняй почаще через File → Save to Roblox. Studio хранит старые версии, поэтому ты всегда сможешь вернуться назад.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

2
Шаг 2 / 10

Узнай три панели

  1. Большое 3D-окно посередине называется Viewport. Это мир твоей игры.
  2. Explorer показывает все объекты в игре. Properties показывает настройки выбранного объекта.
  3. Чтобы двигать камеру, держи правую кнопку мыши и осматривайся, летай клавишами W A S D, вниз и вверх двигайся клавишами Q и E.
  4. Потерялся? Выбери любую деталь и нажми F. Камера сразу перелетит к ней.

Подробнее

  • Explorer и Properties стоят справа в окне. Explorer сверху, а Properties под ним.
  • Щёлкни объект во Viewport, и он подсветится также в Explorer. Щёлкни его название в Explorer, и он будет выбран во Viewport.
  • Плоская платформа с круглым значком на ней — это SpawnLocation. Игроки появляются на ней, когда игра начинается. Оставь её на месте.
  • Ошибся? Нажми Ctrl+Z, чтобы отменить последнее действие. Нажми ещё раз, чтобы вернуться на шаг назад.
Совет. Если какой-то панели нет, открой её в меню Window. В старых версиях она на вкладке View.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

3
Шаг 3 / 10

Построй стартовую платформу

  1. На вкладке Home нажми Part. Появится серый блок.
  2. В Properties задай Size равным 12, 1, 12 и переименуй деталь в Start.
  3. Включи Anchored. Закреплённая деталь никогда не падает и не двигается.
  4. Выбери понравившийся цвет кнопкой Color.

Подробнее

  • Новая деталь появляется перед камерой, а её название в Explorer равно Part.
  • Чтобы переименовать её, щёлкни по ней в Explorer один раз и нажми F2, введи Start и нажми Enter.
  • В Properties щёлкни поле Size, введи 12, 1, 12 и нажми Enter. Эти три числа означают ширину, высоту и глубину.
  • Anchored является флажком в Properties. Галочка означает, что он включён.
  • Инструментом Move (Ctrl+2) поставь платформу рядом с SpawnLocation, чтобы игроки могли зайти на неё.
Частая ошибка. Забыть про Anchored. Пока ты редактируешь, деталь выглядит нормально, а когда игра начинается, она падает в пустоту.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

4
Шаг 4 / 10

Добавь прыжки

  1. Выбери Start и нажми Ctrl+D, чтобы сделать копию. Оттащи копию вперёд инструментом Move (Ctrl+2).
  2. Сделай её меньше инструментом Scale (Ctrl+3). Хорошо подходит размер 6, 1, 6.
  3. Оставляй между платформами промежуток от 5 до 7 studs. Повторяй, пока не получится от 6 до 8 платформ.
  4. Подними некоторые платформы чуть выше, чтобы трасса шла вверх.

Подробнее

  • Копия появляется точно поверх оригинала, поэтому кажется, что ничего не произошло. Потяни синюю или красную стрелку инструмента Move, и копия выедет в сторону.
  • Инструментом Scale потяни за один из маленьких шариков на детали, чтобы изменить её размер. Размер можно также ввести в Properties.
  • Поле Position в Properties показывает, где стоит деталь. Сравни числа двух платформ, чтобы измерить промежуток между ними.
  • Каждая платформа должна быть Anchored. Копии закреплённой детали тоже закреплены, поэтому проверяй это только для деталей, которые ты создал заново.
  • Нажми F5, чтобы самому попробовать прыжки, и Shift+F5, чтобы остановить. Делай так после каждых двух-трёх платформ.
Совет. Обычный персонаж прыгает на 7.2 studs в высоту и пролетает вперёд около 8 studs. Промежутки больше 8 studs почти невозможно перепрыгнуть.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

5
Шаг 5 / 10

Добавь лаву, которая возвращает игрока в начало

  1. Добавь новую деталь Part между двумя платформами. Сделай её красной, задай Material равным Neon, включи Anchored и назови её Lava.
  2. В Explorer наведи курсор на Lava, нажми кнопку + и выбери Script.
  3. Удали строку, которая там уже есть, и вставь этот код.
Lava > Script
local lava = script.Parent

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

Что делает каждая часть

  • script.Parent это деталь, в которой лежит скрипт. Здесь это лава.
  • Touched срабатывает каждый раз, когда что-то касается детали. hit это то, что коснулось, например ступня.
  • hit.Parent это весь персонаж. Если у него есть Humanoid, значит это игрок, и скрипт ставит Health равным 0.

Подробнее

  • Material является списком в Properties. Щёлкни его и выбери Neon. Neon заставляет деталь светиться.
  • Когда ты добавляешь Script, он открывается в новой вкладке с одной строкой кода. Щёлкни внутри кода, нажми Ctrl+A, чтобы выделить всё, и Ctrl+V, чтобы вставить поверх.
  • Вернись в свой мир, щёлкнув вкладку с названием твоего места.
  • Чтобы проверить: нажми F5 и зайди в лаву. Твой персонаж рассыплется и вернётся на старт.
  • Сделай лаву широкой и плоской, например Size 12, 1, 6, и поставь её чуть ниже платформ, чтобы неудачный прыжок заканчивался в ней.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

6
Шаг 6 / 10

Добавь контрольные точки

  1. В Explorer наведи курсор на Workspace, нажми + и добавь Folder. Назови её Checkpoints.
  2. Расставь вдоль трассы три закреплённые детали и перетащи их в папку. Назови их 1, 2 и 3. Деталь 1 стоит на стартовой платформе.
  3. Наведи курсор на ServerScriptService, нажми + и добавь Script. Вставь этот код.
ServerScriptService > Script
local Players = game:GetService("Players")
local checkpoints = workspace:WaitForChild("Checkpoints")

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

	local stage = Instance.new("IntValue")
	stage.Name = "Stage"
	stage.Value = 1
	stage.Parent = stats

	player.CharacterAdded:Connect(function(character)
		local root = character:WaitForChild("HumanoidRootPart")
		local point = checkpoints:FindFirstChild(tostring(stage.Value))
		if point then
			task.wait(0.1)
			root.CFrame = point.CFrame + Vector3.new(0, 4, 0)
		end
	end)
end)

for _, point in ipairs(checkpoints:GetChildren()) do
	point.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		local stats = player and player:FindFirstChild("leaderstats")
		if not stats then return end

		local number = tonumber(point.Name)
		if number == stats.Stage.Value + 1 then
			stats.Stage.Value = number
		end
	end)
end

Что делает каждая часть

  • leaderstats это особое имя папки. Значения внутри неё показываются в списке игроков, поэтому все видят чужой Stage.
  • Когда персонаж появляется, скрипт переносит его к контрольной точке, имя которой равно Stage игрока.
  • Касание контрольной точки увеличивает Stage, только если это следующая точка. Так игроки не могут перескакивать вперёд.

Подробнее

  • Folder содержит другие объекты, как папка на компьютере. Сама по себе в игре она ничего не делает.
  • Чтобы перетащить деталь в папку, потяни её название в Explorer на название Checkpoints и отпусти. Тогда деталь будет стоять на один шаг правее, под папкой.
  • Сделай детали-чекпоинты тонкими и широкими, например Size 6, 0.4, 6, и положи их на платформы. Другой цвет поможет игрокам их заметить.
  • Чтобы проверить: нажми F5 и посмотри на список игроков в правом верхнем углу. Там написано Stage 1. Коснись чекпоинта 2, и там появится 2.
  • Чекпоинтов нужно касаться по порядку. Если коснуться 3 раньше 2, ничего не произойдёт.
Частая ошибка. Назвать детали Checkpoint1 или One. Скрипт ищет точные имена 1, 2 и 3.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

7
Шаг 7 / 10

Сделай исчезающую платформу

  1. Выбери одну платформу посередине трассы и добавь в неё Script.
  2. Вставь этот код и нажми Play, чтобы посмотреть, как она мигает.
Platform > Script
local platform = script.Parent

while true do
	task.wait(2)
	platform.Transparency = 1
	platform.CanCollide = false

	task.wait(2)
	platform.Transparency = 0
	platform.CanCollide = true
end

Что делает каждая часть

  • while true do повторяет код без конца.
  • task.wait(2) ждёт 2 секунды.
  • Transparency со значением 1 делает деталь невидимой. CanCollide false позволяет игрокам провалиться сквозь неё.

Подробнее

  • Чтобы добавить Script, наведи курсор на название платформы в Explorer, нажми + и выбери Script, так же как для лавы.
  • Платформа видна 2 секунды и исчезает на 2 секунды. Игрокам нужно рассчитать прыжок по времени.
  • Первое число показывает, как долго платформа остаётся видимой. Второе число показывает, как долго её нет.
  • Не клади этот скрипт в стартовую платформу или в чекпоинт, иначе игроки упадут, как только придут.
Совет. Измени два числа, и платформа будет мигать быстрее или медленнее.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

8
Шаг 8 / 10

Построй финишную линию

  1. Поставь в конце большую закреплённую деталь и назови её Finish. Сделай её золотой, чтобы игроки видели цель.
  2. Добавь в Finish Script и вставь этот код.
Finish > Script
local Players = game:GetService("Players")
local finish = script.Parent
local cooldown = {}

finish.Touched:Connect(function(hit)
	local player = Players:GetPlayerFromCharacter(hit.Parent)
	local stats = player and player:FindFirstChild("leaderstats")
	if not stats or cooldown[player] then return end

	cooldown[player] = true
	stats.Stage.Value = 1
	player:LoadCharacter()

	task.wait(2)
	cooldown[player] = nil
end)

Что делает каждая часть

  • GetPlayerFromCharacter находит, какой игрок коснулся финиша.
  • Таблица cooldown не даёт коду сработать много раз за одну секунду.
  • Stage возвращается к 1, а LoadCharacter отправляет игрока на старт для нового забега.

Подробнее

  • Чтобы сделать её золотой, щёлкни поле Color в Properties и выбери жёлтый. Material Neon заставляет её сиять.
  • Size 12, 1, 12 хорошо подходит для финиша. Поставь её после последнего прыжка, чуть выше остальных.
  • Чтобы проверить: нажми F5, пройди трассу и встань на золотую деталь. Ты вернёшься на старт, а Stage снова покажет 1.
  • Пауза в 2 секунды нужна, потому что один шаг касается детали много раз.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

9
Шаг 9 / 10

Проверь свою игру

  1. Нажми F5, чтобы начать игру. Пройди всю трассу от старта до финиша.
  2. Специально упади в лаву. Ты должен вернуться на последнюю контрольную точку.
  3. Нажми Shift+F5, чтобы остановить игру.
  4. Открой окно Output в меню Window. Красный текст значит, что в скрипте есть ошибка, и там указан номер строки.

Подробнее

  • F5 запускает игру с твоим персонажем в ней. Пока игра идёт, панель инструментов меняется.
  • Изменения, которые ты вносишь, пока игра идёт, пропадают, когда ты её останавливаешь. Всегда сначала нажимай Shift+F5, а потом редактируй.
  • В окне Output щёлкни красную строку, и Studio откроет скрипт на строке с ошибкой.
  • Когда что-то не работает, проверь три вещи: название детали, где лежит скрипт и включён ли Anchored.
Частая ошибка. Платформа падает, когда игра начинается: значит, Anchored выключен. Ничего не происходит, когда ты касаешься детали: скрипт лежит не в том объекте или в имени опечатка.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

10
Шаг 10 / 10

Опубликуй игру

  1. Выбери File → Publish to Roblox. Придумай игре название и короткое описание.
  2. На сайте Creator Hub открой свою игру и ответь на вопросы анкеты Maturity. Без неё Roblox не даст другим людям играть.
  3. Поставь игре статус Public и отправь ссылку другу.

Подробнее

  • Когда ты публикуешь впервые, Studio просит название и описание. Нажми Create. После этого File → Publish to Roblox отправляет твои новейшие изменения.
  • Creator Hub является сайтом create.roblox.com. Войди с тем же аккаунтом и щёлкни свою игру в списке.
  • Анкета Maturity спрашивает, что есть в твоей игре. Отвечай честно. В таком обби, как это, нет насилия и ничего страшного.
  • Прежде чем игру можно сделать публичной, Roblox может попросить что-то ещё, например проверку возраста на аккаунте. Страница подскажет, чего не хватает.
  • Если тебе ещё нет 18, выполняй этот шаг вместе с кем-то из родителей.
Совет. Попроси друга поиграть, пока ты смотришь. Места, где он застревает, надо исправлять в первую очередь.
У меня не получается этот шаг

Сначала проверь эти три вещи

  • Название каждой детали и каждого скрипта точно такое же, как в уроке, с теми же заглавными буквами.
  • Скрипт лежит в нужном объекте. Посмотри на подпись над блоком с кодом.
  • Открой окно Output через меню Window. Красный текст показывает скрипт и строку, в которой есть проблема.

Всё ещё не получается? Напиши нам →

Теперь измени сам

  • Добавь четвёртую контрольную точку. Как её нужно назвать?
  • Сделай три исчезающие платформы, которые мигают с разной скоростью.
  • Измени лаву так, чтобы она отнимала только половину здоровья. Подсказка: humanoid.Health = humanoid.Health - 50