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

Создай свой первый симулятор

Кликай по кристаллу, чтобы набирать силу, продавай силу за монеты и покупай улучшения, которые делают каждый клик сильнее.

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

Подготовь место

  1. Открой Roblox Studio, нажми New Experience и выбери шаблон Baseplate.
  2. На полу ты построишь три вещи: кристалл для кликов, площадку для продажи и площадку для покупки улучшений.
  3. Оставь между ними около 20 studs, чтобы игрокам приходилось ходить.

Подробнее

  • Шаблон Baseplate есть в списке шаблонов на стартовом экране.
  • Поле Position в Properties показывает, где стоит деталь. Две детали, у которых первые числа отличаются на 20, стоят в 20 studs друг от друга.
  • Держи эти три вещи рядом с SpawnLocation, платформой, на которой появляются игроки.
  • На Mac каждый раз, когда в уроке написано Ctrl, нажимай клавишу Cmd.
Совет. Сначала нарисуй план на бумаге. Симулятор приятно играть, когда путь между кликом, продажей и улучшением короткий.
У меня не получается этот шаг

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

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

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

2
Шаг 2 / 8

Создай статистику игрока

  1. Наведи курсор на ServerScriptService, нажми + и добавь Script. Назови его Stats.
  2. Удали строку, которая там уже есть, и вставь этот код.
  3. Нажми Play. В списке игроков будут Power 0 и Coins 0.
ServerScriptService > Stats
local Players = game:GetService("Players")

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

	for _, name in ipairs({"Power", "Coins"}) do
		local value = Instance.new("IntValue")
		value.Name = name
		value.Parent = stats
	end

	local multiplier = Instance.new("IntValue")
	multiplier.Name = "Multiplier"
	multiplier.Value = 1
	multiplier.Parent = player
end)

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

  • Цикл создаёт два значения одним куском кода: Power и Coins.
  • Multiplier показывает, сколько силы даёт один клик. Сначала он равен 1.
  • Multiplier лежит в игроке, а не в leaderstats, поэтому в списке игроков его не видно.

Подробнее

  • Когда ты щёлкаешь +, введи слово Script, чтобы быстро его найти.
  • Скрипт открывается в новой вкладке. Щёлкни внутри кода, нажми Ctrl+A, а потом Ctrl+V, чтобы заменить всё.
  • Переименуй скрипт в Explorer через F2. Это название нужно только тебе. Оно поможет потом найти скрипт.
  • Список игроков находится в правом верхнем углу игры.
У меня не получается этот шаг

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

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

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

3
Шаг 3 / 8

Построй кристалл

  1. Добавь Part. Задай Size равным 6, 8, 6, включи Anchored и назови его Crystal. Выбери яркий цвет и задай Material равным Neon.
  2. Наведи курсор на Crystal, нажми + и добавь ClickDetector.
  3. Добавь в Crystal Script и вставь этот код.
  4. Нажми Play и кликни по кристаллу. С каждым кликом Power растёт на 1.
Crystal > Script
local crystal = script.Parent
local clickDetector = crystal.ClickDetector

clickDetector.MouseClick:Connect(function(player)
	local power = player.leaderstats.Power
	power.Value += player.Multiplier.Value
end)

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

  • ClickDetector делает деталь кликабельной. Он работает и с касаниями на телефоне.
  • MouseClick сообщает скрипту, какой игрок кликнул.
  • Скрипт прибавляет Multiplier игрока к Power, поэтому улучшения делают каждый клик сильнее.

Подробнее

  • Введи размер в поле Size в Properties и нажми Enter. Потом подними кристалл инструментом Move, пока он не встанет на пол.
  • Когда ты щёлкаешь +, введи ClickDetector, чтобы его найти. В Explorer он должен стоять на один шаг правее, под Crystal.
  • В игре указатель мыши меняется на руку, когда он над кристаллом.
  • Ты должен стоять достаточно близко. ClickDetector работает с расстояния 32 studs или меньше.
Частая ошибка. Ничего не происходит при клике: ClickDetector должен лежать прямо внутри Crystal, рядом со скриптом.
У меня не получается этот шаг

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

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

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

4
Шаг 4 / 8

Добавь площадку продажи

  1. Добавь Part на пол. Задай Size равным 8, 1, 8, включи Anchored, сделай его жёлтым и назови Sell.
  2. Добавь в Sell Script и вставь этот код.
  3. Нажми Play, несколько раз кликни по кристаллу и встань на площадку. Power превратится в Coins.
Sell > Script
local Players = game:GetService("Players")
local pad = script.Parent

pad.Touched:Connect(function(hit)
	local player = Players:GetPlayerFromCharacter(hit.Parent)
	if not player then return end

	local stats = player.leaderstats
	if stats.Power.Value > 0 then
		stats.Coins.Value += stats.Power.Value
		stats.Power.Value = 0
	end
end)

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

  • GetPlayerFromCharacter находит игрока, который встал на площадку.
  • Площадка прибавляет всю Power игрока к Coins, а потом ставит Power обратно в 0.

Подробнее

  • Пад является плоской деталью, на которую заходят игроки.
  • Положи пад плоско на пол. Если он слишком высоко, игроки не смогут на него ступить.
  • Если зайти на пад с 0 силы, ничего не произойдёт. Это правильно.
  • Чтобы проверить: щёлкни кристалл 10 раз, зайди на пад, и список игроков покажет Power 0 и Coins 10.
У меня не получается этот шаг

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

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

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

5
Шаг 5 / 8

Добавь площадку улучшения

  1. Добавь ещё один Part на пол. Задай Size равным 8, 1, 8, включи Anchored, сделай его синим и назови Upgrade.
  2. Добавь в Upgrade Script и вставь этот код.
  3. Нажми Play, заработай 25 coins и встань на площадку. Теперь каждый клик даёт 2 силы.
Upgrade > Script
local Players = game:GetService("Players")
local pad = script.Parent
local waiting = {}

pad.Touched:Connect(function(hit)
	local player = Players:GetPlayerFromCharacter(hit.Parent)
	if not player or waiting[player] then return end

	local price = player.Multiplier.Value * 25
	local coins = player.leaderstats.Coins
	if coins.Value < price then return end

	waiting[player] = true
	coins.Value -= price
	player.Multiplier.Value += 1

	task.wait(1)
	waiting[player] = nil
end)

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

  • Цена равна Multiplier игрока, умноженному на 25, поэтому каждое улучшение дороже предыдущего.
  • Таблица ожидания не даёт купить много улучшений сразу, если долго стоять на площадке.
  • После покупки Multiplier увеличивается на 1.

Подробнее

  • Поставь пад в нескольких шагах от пада продажи, чтобы игроки не покупали случайно.
  • Первое улучшение стоит 25 монет. После него Coins уменьшается на 25, а один клик даёт 2 силы.
  • Если монет меньше, чем цена, пад ничего не делает. Сойди с него, заработай больше и вернись.
  • Пауза в 1 секунду является причиной, почему стояние на паде покупает только одно улучшение за раз.
У меня не получается этот шаг

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

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

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

6
Шаг 6 / 8

Подпиши площадки

  1. Наведи курсор на Sell, нажми + и добавь BillboardGui. Задай его Size равным {0, 200}, {0, 50}, а StudsOffset равным 0, 4, 0.
  2. Добавь TextLabel внутрь BillboardGui. Задай его Size равным {1, 0}, {1, 0}, включи TextScaled и напиши такой текст: SELL
  3. Сделай то же самое для Upgrade с текстом: UPGRADE
  4. Сделай то же самое для Crystal с текстом: CLICK ME. Здесь поставь StudsOffset равным 0, 7, 0, чтобы надпись висела над кристаллом.

Подробнее

  • Для Size и StudsOffset щёлкни поле в Properties, введи числа точно так, как показано, со скобками и запятыми, и нажми Enter.
  • Text является свойством TextLabel. Щёлкни поле Text, введи слово и нажми Enter.
  • Способ быстрее: щёлкни готовый BillboardGui в Explorer, нажми Ctrl+C, щёлкни следующую деталь и нажми Ctrl+Shift+V. Потом измени только текст.
  • Надписи помогают новым игрокам понять игру без всяких объяснений.
Совет. BillboardGui всегда поворачивается к камере, поэтому игроки могут прочитать надпись с любой стороны.
У меня не получается этот шаг

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

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

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

7
Шаг 7 / 8

Проверь цикл

  1. Нажми F5. Кликай, продавай, улучшай и повторяй.
  2. Проверь, что цена улучшения растёт: 25 coins, потом 50, потом 75.
  3. Нажми Shift+F5, чтобы остановить игру. Если что-то не работает, открой окно Output в меню Window и прочитай красный текст.

Подробнее

  • Считай свои клики. С Multiplier 1 десять кликов дают 10 силы.
  • После первого улучшения десять кликов дают 20 силы, а после второго 30.
  • Изменения, которые ты вносишь, пока игра идёт, пропадают, когда ты её останавливаешь. Сначала нажми Shift+F5, а потом редактируй.
  • В окне Output щёлкни красную строку, и Studio откроет скрипт на строке с ошибкой.
Частая ошибка. Площадка ничего не покупает: нужно минимум 25 Coins, а не 25 Power. Сначала продай.
У меня не получается этот шаг

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

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

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

8
Шаг 8 / 8

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

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

Подробнее

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

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

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

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

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

  • Добавь второй кристалл, который даёт 5 силы за клик, но стоит далеко.
  • Сделай так, чтобы цена улучшения удваивалась каждый раз. Подсказка: 25 * 2 ^ (player.Multiplier.Value - 1)
  • Сделай так, чтобы кристалл становился чуть больше после каждого клика. Подсказка: измени crystal.Size