← Усі уроки
Урок 5

Створи свою першу гру «кради та захищай»

Кожен гравець отримує базу. Схопи самоцвіт посеред карти, віднеси його додому, щоб отримати очко, і торкнись будь-кого, хто його несе.

Безкоштовно70 хвилин · Для початківців, останній урок · Roblox Studio
1
Крок 1 / 8

Підготуй місце

  1. Відкрий Roblox Studio, натисни New Experience і вибери шаблон Baseplate.
  2. Самоцвіт лежатиме посеред карти. Навколо нього стоятимуть чотири бази, кожна приблизно за 60 studs від середини.
  3. Для цієї гри потрібно щонайменше двоє гравців, тож наприкінці ти протестуєш її з двома тестовими гравцями.

Докладніше

  • Шаблон Baseplate є в списку шаблонів на початковому екрані.
  • Поле Position у Properties показує, де стоїть частина. Position 60, 0.5, 0 означає 60 studs від середини карти.
  • Перенеси SpawnLocation, платформу, на якій з'являються гравці, ближче до середини, щоб кожен гравець починав на однаковій відстані від самоцвіта.
  • На Mac щоразу, коли в уроці написано Ctrl, натискай клавішу Cmd.
Цей крок у мене не виходить

Спершу перевір ці три речі

  • Назва кожної частини й кожного скрипта точно така, як в уроці, з тими самими великими літерами.
  • Скрипт лежить у правильному об'єкті. Подивись на підпис над блоком із кодом.
  • Відкрий вікно Output через меню Window. Червоний текст показує скрипт і рядок, у якому є проблема.

Усе ще не виходить? Напиши нам →

2
Крок 2 / 8

Збудуй бази

  1. В Explorer наведи курсор на Workspace, натисни + і додай Folder. Назви її Bases.
  2. Додай Part. Постав Size на 16, 1, 16, увімкни Anchored і зроби її сірою. Перетягни її в Bases і назви Base1.
  3. Скопіюй її тричі через Ctrl+D. Назви копії Base2, Base3 і Base4 та постав по одній з кожного боку карти.

Докладніше

  • Щоб покласти частину в теку, потягни її назву в Explorer на назву Bases.
  • Копії, зроблені через Ctrl+D, уже лежать у теці Bases. Перейменуй кожну через F2.
  • Назви мають бути точно Base1, Base2, Base3 і Base4, без пробілу перед числом.
  • На сервері, де більше чотирьох гравців, гравців більше, ніж баз. Пізніше ти можеш поставити розмір сервера 4 в налаштуваннях гри на Creator Hub.
Порада. Тримай усі чотири бази на однаковій відстані від середини. Тоді гра чесна для всіх.
Цей крок у мене не виходить

Спершу перевір ці три речі

  • Назва кожної частини й кожного скрипта точно така, як в уроці, з тими самими великими літерами.
  • Скрипт лежить у правильному об'єкті. Подивись на підпис над блоком із кодом.
  • Відкрий вікно Output через меню Window. Червоний текст показує скрипт і рядок, у якому є проблема.

Усе ще не виходить? Напиши нам →

3
Крок 3 / 8

Створи самоцвіт

  1. Додай Part посеред карти, приблизно на 4 studs над підлогою. Постав Size на 2, 2, 2, вибери яскравий колір і постав Material на Neon. Назви її Gem.
  2. Увімкни Anchored і Massless та вимкни CanCollide.
  3. Наведи курсор на Gem, натисни + і додай ProximityPrompt. Постав ActionText на Take, а HoldDuration на 1.

Що робить кожна частина

  • ProximityPrompt показує кнопку, коли гравець стоїть поруч. Якщо втримувати її 1 секунду, вона спрацьовує.
  • Massless увімкнено, а CanCollide вимкнено, щоб самоцвіт не сповільнював і не штовхав гравця, який його несе.

Докладніше

  • Anchored, Massless і CanCollide є прапорцями в Properties.
  • Коли ти клацаєш +, введи ProximityPrompt, щоб його знайти. Клацни його, а потім у Properties зміни ActionText і HoldDuration.
  • У грі, коли ти стоїш біля самоцвіта, з'являється маленька кнопка з літерою E і словом Take.
  • На телефоні гравці затримують палець на цій кнопці.
Цей крок у мене не виходить

Спершу перевір ці три речі

  • Назва кожної частини й кожного скрипта точно така, як в уроці, з тими самими великими літерами.
  • Скрипт лежить у правильному об'єкті. Подивись на підпис над блоком із кодом.
  • Відкрий вікно Output через меню Window. Червоний текст показує скрипт і рядок, у якому є проблема.

Усе ще не виходить? Напиши нам →

4
Крок 4 / 8

Дай кожному гравцеві базу й рахунок

  1. Наведи курсор на ServerScriptService, натисни + і додай Script. Назви його Game.
  2. Видали рядок, який уже є, і встав цей код. Це перша з трьох частин.
  3. Натисни Play. Одна база стане зеленою. Це твоя.
ServerScriptService > Game (1 / 3)
local Players = game:GetService("Players")

local bases = workspace:WaitForChild("Bases")
local gem = workspace:WaitForChild("Gem")
local home = gem.CFrame
local carrier = nil

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

	local score = Instance.new("IntValue")
	score.Name = "Score"
	score.Parent = stats

	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == nil then
			base:SetAttribute("Owner", player.UserId)
			base.Color = Color3.fromRGB(60, 220, 120)
			break
		end
	end
end)

Players.PlayerRemoving:Connect(function(player)
	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == player.UserId then
			base:SetAttribute("Owner", nil)
			base.Color = Color3.fromRGB(160, 160, 160)
		end
	end
end)

Що робить кожна частина

  • Перші рядки знаходять бази й самоцвіт і запам'ятовують, де самоцвіт лежав спочатку.
  • SetAttribute записує UserId власника на першу вільну базу.
  • PlayerRemoving знову звільняє базу, коли її власник виходить.

Докладніше

  • Скрипт відкривається в новій вкладці. Клацни всередині коду, натисни Ctrl+A, а потім Ctrl+V, щоб замінити все.
  • Яка база стане зеленою, залежить від порядку баз у теці. Пройдися світом, щоб знайти свою.
  • Список гравців у правому верхньому куті показує Score 0.
  • Поки що нічого не стається, коли ти підходиш до самоцвіта й утримуєш E. Це буде в наступному кроці.
Цей крок у мене не виходить

Спершу перевір ці три речі

  • Назва кожної частини й кожного скрипта точно така, як в уроці, з тими самими великими літерами.
  • Скрипт лежить у правильному об'єкті. Подивись на підпис над блоком із кодом.
  • Відкрий вікно Output через меню Window. Червоний текст показує скрипт і рядок, у якому є проблема.

Усе ще не виходить? Напиши нам →

5
Крок 5 / 8

Дай гравцям брати самоцвіт

  1. Знову відкрий скрипт Game.
  2. Встав цей код під кодом із попереднього кроку.
  3. Натисни Play, підійди до самоцвіта й утримуй E. Самоцвіт підскакує над твоєю головою й іде за тобою.
ServerScriptService > Game (2 / 3)
local function resetGem()
	carrier = nil

	local weld = gem:FindFirstChild("CarryWeld")
	if weld then
		weld:Destroy()
	end

	gem.Anchored = true
	gem.CFrame = home
	gem.ProximityPrompt.Enabled = true
end

gem.ProximityPrompt.Triggered:Connect(function(player)
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if carrier or not root then return end

	carrier = player
	gem.ProximityPrompt.Enabled = false
	gem.Anchored = false
	gem.CFrame = root.CFrame * CFrame.new(0, 4, 0)

	local weld = Instance.new("WeldConstraint")
	weld.Name = "CarryWeld"
	weld.Part0 = root
	weld.Part1 = gem
	weld.Parent = gem
end)

Що робить кожна частина

  • carrier пам'ятає, хто тримає самоцвіт. Ніхто інший не може його взяти, поки його несуть.
  • WeldConstraint приклеює самоцвіт до гравця, тож він рухається разом із ним.
  • resetGem прибирає зварювання й повертає самоцвіт на середину.

Докладніше

  • Щоб знову відкрити скрипт, двічі клацни Game в Explorer.
  • Клацни після самого останнього символу коду й двічі натисни Enter. Потім натисни Ctrl+V. Цього разу не натискай Ctrl+A, інакше замінеш першу частину.
  • Поки ти несеш самоцвіт, він ширяє на 4 studs над твоєю головою.
  • Щоб перевірити: візьми самоцвіт і переконайся, що кнопка Take зникла на весь час, поки ти його несеш.
Цей крок у мене не виходить

Спершу перевір ці три речі

  • Назва кожної частини й кожного скрипта точно така, як в уроці, з тими самими великими літерами.
  • Скрипт лежить у правильному об'єкті. Подивись на підпис над блоком із кодом.
  • Відкрий вікно Output через меню Window. Червоний текст показує скрипт і рядок, у якому є проблема.

Усе ще не виходить? Напиши нам →

6
Крок 6 / 8

Додай рахунок і дотики

  1. Встав цю останню частину в самий кінець скрипта Game.
  2. Натисни Play, візьми самоцвіт і забіжи на свою зелену базу. Score збільшується на 1, а самоцвіт повертається на середину.
ServerScriptService > Game (3 / 3)
for _, base in ipairs(bases:GetChildren()) do
	base.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player and player == carrier and base:GetAttribute("Owner") == player.UserId then
			player.leaderstats.Score.Value += 1
			resetGem()
		end
	end)
end

while true do
	task.wait(0.2)

	if carrier then
		local weld = gem:FindFirstChild("CarryWeld")
		local root = weld and weld.Part0
		local character = root and root.Parent
		local humanoid = character and character:FindFirstChildOfClass("Humanoid")

		if not humanoid or humanoid.Health <= 0 or root.Position.Y < -20 then
			resetGem()
		else
			for _, other in ipairs(Players:GetPlayers()) do
				local otherRoot = other ~= carrier and other.Character and other.Character:FindFirstChild("HumanoidRootPart")
				if otherRoot and (otherRoot.Position - root.Position).Magnitude < 5 then
					resetGem()
					break
				end
			end
		end
	end
end

Що робить кожна частина

  • Кожна база перевіряє три речі: гравець торкнувся її, цей гравець несе самоцвіт, і база належить йому.
  • Цикл унизу виконується 5 разів на секунду. Якщо інший гравець підходить до того, хто несе, ближче ніж на 5 studs, самоцвіт повертається.
  • Цикл також повертає самоцвіт, якщо той, хто його несе, виходить із гри або падає з карти.

Докладніше

  • Знову клацни після самого останнього символу скрипта, двічі натисни Enter і встав код.
  • Готовий скрипт має три частини в такому порядку: бази та рахунок, взяття самоцвіта, очки й вдаряння.
  • Сіра база, що нікому не належить, очок не дає. Рахується лише твоя власна зелена база.
  • На самоті вдаряння не перевірити. Це ти зробиш удвох у наступному кроці.
Часта помилка. Вставити цю частину посеред скрипта. Цикл while ніколи не закінчується, тож код під ним ніколи не виконається.
Цей крок у мене не виходить

Спершу перевір ці три речі

  • Назва кожної частини й кожного скрипта точно така, як в уроці, з тими самими великими літерами.
  • Скрипт лежить у правильному об'єкті. Подивись на підпис над блоком із кодом.
  • Відкрий вікно Output через меню Window. Червоний текст показує скрипт і рядок, у якому є проблема.

Усе ще не виходить? Напиши нам →

7
Крок 7 / 8

Протестуй із двома гравцями

  1. Поруч із кнопкою Play відкрий маленьке меню й вибери Server & Clients. Постав кількість гравців на 2 і натисни Play.
  2. Studio відкриє два вікна гри. Кожне — це інший гравець з іншою базою.
  3. Візьми самоцвіт в одному вікні. В іншому вікні набіжи на цього гравця. Самоцвіт повертається на середину.
  4. Зупини тест червоною кнопкою Stop у головному вікні Studio, потім перемкни меню назад на Test.

Докладніше

  • Маленьке меню є стрілкою одразу праворуч від кнопки Play угорі Studio.
  • Два вікна гри відкриваються одне поверх одного. Відсунь одне вбік, щоб бачити обидва.
  • Клацни всередині вікна, перш ніж користуватися клавіатурою. Клавіші йдуть у те вікно, яке ти клацнув останнім.
  • Для перевірки з двома вікнами потрібен комп'ютер із достатнім обсягом пам'яті. Якщо все дуже повільно, спершу закрий інші програми.
Цей крок у мене не виходить

Спершу перевір ці три речі

  • Назва кожної частини й кожного скрипта точно така, як в уроці, з тими самими великими літерами.
  • Скрипт лежить у правильному об'єкті. Подивись на підпис над блоком із кодом.
  • Відкрий вікно 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 очок, і скидай усі рахунки на 0.
  • Додай другий самоцвіт іншого кольору.
  • Зроби так, щоб той, хто несе, ходив повільніше. Підказка: постав Humanoid.WalkSpeed на 12, коли самоцвіт узято, і поверни на 16 у resetGem.