← Všechny návody
Návod 4

Postav svůj první tower defense

Nepřátelé jdou po cestě k tvé základně a věž střílí na nejbližšího z nich.

Zdarma60 minut · Začátečník · Roblox Studio
1
Krok 1 / 8

Připrav místo

  1. Otevři Roblox Studio, klikni na New Experience a vyber šablonu Baseplate.
  2. V Explorer najeď myší na Workspace, klikni na + a přidej Folder. Pojmenuj ho Path.
  3. Přidej do Workspace druhý Folder a pojmenuj ho Enemies. Nech ho prázdný. Nepřátelé se v něm objeví během hry.

Více podrobností

  • Šablona Baseplate je v seznamu šablon na úvodní obrazovce.
  • Když klikneš na +, napiš slovo Folder, abys ho rychle našel. Složku přejmenuješ klávesou F2.
  • Názvy musí být přesně Path a Enemies, s velkým prvním písmenem. Skripty hledají právě tyto názvy.
  • Na Mac používej klávesu Cmd pokaždé, když návod říká Ctrl.
Tenhle krok mi nefunguje

Nejdřív zkontroluj tyto tři věci

  • Název každého Partu a skriptu je přesně jako v návodu, se stejnými velkými písmeny.
  • Skript leží ve správném objektu. Podívej se na popisek nad polem s kódem.
  • Otevři okno Output z nabídky Window. Červený text ukáže skript a řádek, na kterém je problém.

Pořád to nejde? Napiš nám →

2
Krok 2 / 8

Postav cestu

  1. Přidej Part. Nastav Size na 6, 1, 6, zapni Anchored a přetáhni ho do složky Path. Pojmenuj ho 1.
  2. Zkopíruj ho pomocí Ctrl+D a posuň kopii asi o 30 studs dál. Pojmenuj ji 2.
  3. Opakuj, dokud nemáš 5 Partů se jmény 1, 2, 3, 4 a 5. Rozmísti je tak, aby trasa měla pár zatáček.
  4. Nepřátelé půjdou z 1 na 2, na 3 a tak dál, mezi každou dvojicí po přímce.

Více podrobností

  • Part dáš do složky tak, že přetáhneš jeho název v Explorer na název Path.
  • Kopie vytvořená přes Ctrl+D už je uvnitř složky Path. Stačí ji posunout a přejmenovat.
  • Názvy jsou jen čísla: 1, 2, 3, 4, 5. Žádná písmena a žádné mezery.
  • Díly nech ležet na podlaze. Nepřátelé se vznášejí 2 studs nad nimi.
Častá chyba. Přeskočit číslo. Když chybí Part 3, nepřátelé se zastaví u Partu 2 a skript ukáže chybu.
Tenhle krok mi nefunguje

Nejdřív zkontroluj tyto tři věci

  • Název každého Partu a skriptu je přesně jako v návodu, se stejnými velkými písmeny.
  • Skript leží ve správném objektu. Podívej se na popisek nad polem s kódem.
  • Otevři okno Output z nabídky Window. Červený text ukáže skript a řádek, na kterém je problém.

Pořád to nejde? Napiš nám →

3
Krok 3 / 8

Vytvoř nepřítele

  1. Přidej Part. Nastav Shape na Ball, Size na 3, 3, 3 a udělej ho červený. Zapni Anchored, vypni CanCollide a pojmenuj ho Enemy.
  2. Najeď myší na Enemy, klikni na + a přidej IntValue. Pojmenuj ho Health a nastav jeho Value na 3.
  3. Přetáhni Enemy do ServerStorage. Je to teď šablona. Hra z ní bude dělat kopie.

Více podrobností

  • Shape je seznam v Properties. Klikni na něj a vyber Ball.
  • CanCollide je zaškrtávací políčko v Properties. Bez zaškrtnutí hráči a jiné Party procházejí skrz nepřítele.
  • Když klikneš na +, napiš IntValue, abys ho našel. Klikni na nový IntValue a potom v Properties změň Name na Health a Value na 3.
  • Když přetáhneš Enemy do ServerStorage, zmizí z Viewport. To je správně.
Tip. Nepřítel má zapnuté Anchored, protože ho hýbe skript. Party s Anchored ignorují gravitaci i strkání.
Tenhle krok mi nefunguje

Nejdřív zkontroluj tyto tři věci

  • Název každého Partu a skriptu je přesně jako v návodu, se stejnými velkými písmeny.
  • Skript leží ve správném objektu. Podívej se na popisek nad polem s kódem.
  • Otevři okno Output z nabídky Window. Červený text ukáže skript a řádek, na kterém je problém.

Pořád to nejde? Napiš nám →

4
Krok 4 / 8

Postav základnu

  1. Přidej velký Part na konec cesty, vedle Partu 5. Zapni Anchored a pojmenuj ho Base.
  2. Najeď myší na Base, klikni na + a přidej IntValue. Pojmenuj ho Health a nastav jeho Value na 10.
  3. Přidej do Base BillboardGui se Size {0, 200}, {0, 50} a StudsOffset 0, 8, 0. Přidej do něj TextLabel se Size {1, 0}, {1, 0} a zapnutým TextScaled.
  4. Přidej do Base Script a vlož tento kód.
Base > Script
local base = script.Parent
local health = base.Health
local label = base.BillboardGui.TextLabel

local function update()
	if health.Value > 0 then
		label.Text = "Base: " .. health.Value
	else
		label.Text = "Game over"
	end
end

health.Changed:Connect(update)
update()

Co která část dělá

  • Changed se spustí pokaždé, když se změní hodnota Health.
  • Funkce update zapíše nové číslo na popisek nad základnou.
  • Když Health klesne na 0, popisek ukáže Game over a skript Waves přestane posílat nepřátele.

Více podrobností

  • Velikost 10, 10, 10 je dobrý základ. Funguje jakákoli barva.
  • Health základny je jiný objekt než Health nepřítele. Každý leží uvnitř svého vlastního Partu.
  • U Size a StudsOffset napiš čísla přesně tak, jak jsou ukázaná, se závorkami a čárkami, a stiskni Enter.
  • Vyzkoušej: stiskni F5. Popisek nad základnou ukazuje Base: 10.
Tenhle krok mi nefunguje

Nejdřív zkontroluj tyto tři věci

  • Název každého Partu a skriptu je přesně jako v návodu, se stejnými velkými písmeny.
  • Skript leží ve správném objektu. Podívej se na popisek nad polem s kódem.
  • Otevři okno Output z nabídky Window. Červený text ukáže skript a řádek, na kterém je problém.

Pořád to nejde? Napiš nám →

5
Krok 5 / 8

Pošli vlny

  1. Najeď myší na ServerScriptService, klikni na + a přidej Script. Pojmenuj ho Waves.
  2. Smaž řádek, který tam už je, a vlož tento kód.
  3. Stiskni Play. Každé 3 sekundy se u Partu 1 objeví červená koule a pohybuje se po cestě. Když dojde na konec, základna ztratí 1 zdraví.
ServerScriptService > Waves
local TweenService = game:GetService("TweenService")
local ServerStorage = game:GetService("ServerStorage")

local path = workspace:WaitForChild("Path")
local enemies = workspace:WaitForChild("Enemies")
local base = workspace:WaitForChild("Base")
local SPEED = 8

local function walk(enemy)
	for i = 2, #path:GetChildren() do
		local target = path[tostring(i)].Position + Vector3.new(0, 2, 0)
		local distance = (target - enemy.Position).Magnitude
		local info = TweenInfo.new(distance / SPEED, Enum.EasingStyle.Linear)
		local tween = TweenService:Create(enemy, info, {Position = target})
		tween:Play()
		tween.Completed:Wait()
		if not enemy.Parent then return end
	end

	base.Health.Value = math.max(0, base.Health.Value - 1)
	enemy:Destroy()
end

while base.Health.Value > 0 do
	task.wait(3)

	local enemy = ServerStorage.Enemy:Clone()
	enemy.Position = path["1"].Position + Vector3.new(0, 2, 0)
	enemy.Parent = enemies
	task.spawn(walk, enemy)
end

Co která část dělá

  • Clone udělá kopii šablony Enemy ze ServerStorage.
  • Funkce walk posouvá nepřítele postupně ke každému Partu cesty. distance / SPEED drží stejnou rychlost na dlouhých i krátkých úsecích.
  • task.spawn nechá každého nepřítele jít samostatně, takže smyčka může posílat další.

Více podrobností

  • Skript se otevře na nové kartě. Klikni dovnitř kódu, stiskni Ctrl+A a potom Ctrl+V, aby se všechno přepsalo.
  • Nepřátelé se objevují ve složce Enemies, dokud hra běží. Můžeš je sledovat v Explorer.
  • Bez věže dojde k základně každý nepřítel. Po 10 nepřátelích popisek ukáže Game over a další už nepřijdou.
  • Červený text v Output o chybějícím názvu znamená, že některý Part cesty nebo složka má špatný název.
Tenhle krok mi nefunguje

Nejdřív zkontroluj tyto tři věci

  • Název každého Partu a skriptu je přesně jako v návodu, se stejnými velkými písmeny.
  • Skript leží ve správném objektu. Podívej se na popisek nad polem s kódem.
  • Otevři okno Output z nabídky Window. Červený text ukáže skript a řádek, na kterém je problém.

Pořád to nejde? Napiš nám →

6
Krok 6 / 8

Postav věž

  1. Přidej Part poblíž zatáčky cesty. Nastav Size na 4, 8, 4, zapni Anchored a pojmenuj ho Tower.
  2. Přidej do Tower Script a vlož tento kód.
  3. Stiskni Play. Jednou za sekundu věž zasáhne nejbližšího nepřítele v dosahu. Nepřítel bíle blikne a po 3 zásazích zmizí.
Tower > Script
local tower = script.Parent
local enemies = workspace:WaitForChild("Enemies")
local RANGE = 25
local DAMAGE = 1

while true do
	task.wait(1)

	local target = nil
	local closest = RANGE
	for _, enemy in ipairs(enemies:GetChildren()) do
		local distance = (enemy.Position - tower.Position).Magnitude
		if distance < closest then
			target = enemy
			closest = distance
		end
	end

	if target then
		target.Health.Value -= DAMAGE
		if target.Health.Value <= 0 then
			target:Destroy()
		else
			target.Color = Color3.new(1, 1, 1)
			task.wait(0.1)
			target.Color = Color3.fromRGB(255, 60, 60)
		end
	end
end

Co která část dělá

  • Smyčka změří vzdálenost od věže ke každému nepříteli a zapamatuje si nejbližšího.
  • RANGE je to, jak daleko věž dosáhne. DAMAGE je to, kolik zdraví ubere jeden zásah.
  • Když Health klesne na 0, Destroy nepřítele odstraní.

Více podrobností

  • Polož věž 8 až 12 studs od cesty. Dosah je 25 studs na všechny strany.
  • Jedna věž potřebuje na jednoho nepřítele 3 sekundy a nový nepřítel přijde každé 3 sekundy. Jedna věž tedy cestu uhájí jen tehdy, když nepřátelé zůstanou v dosahu dost dlouho.
  • Bílý záblesk trvá desetinu sekundy. Dívej se pozorně, abys ho zahlédl.
  • Druhou věž uděláš tak, že vybereš Tower, stiskneš Ctrl+D a kopii posuneš. Skript jde s ní.
Tip. Věž funguje nejlíp vedle zatáčky, protože tam nepřátelé zůstanou v dosahu déle.
Tenhle krok mi nefunguje

Nejdřív zkontroluj tyto tři věci

  • Název každého Partu a skriptu je přesně jako v návodu, se stejnými velkými písmeny.
  • Skript leží ve správném objektu. Podívej se na popisek nad polem s kódem.
  • Otevři okno Output z nabídky Window. Červený text ukáže skript a řádek, na kterém je problém.

Pořád to nejde? Napiš nám →

7
Krok 7 / 8

Vyzkoušej a vyvaž

  1. Stiskni F5 a sleduj pár vln.
  2. Když žádný nepřítel nedojde k základně, hra je příliš lehká. Když základna rychle přijde o všechno zdraví, je příliš těžká.
  3. Vyvažuješ třemi čísly: dobou čekání ve Waves, hodnotou Health nepřítele a DAMAGE věže.
  4. Stiskem Shift+F5 hru zastavíš. Když něco nefunguje, otevři z nabídky Window okno Output a přečti si červený text.

Více podrobností

  • Měň vždy jen jedno číslo a pak hru zkus znovu. Jinak nevíš, která změna pomohla.
  • Čekací doba je číslo v task.wait(3) blízko konce skriptu Waves. Menší číslo posílá nepřátele rychleji.
  • Health nepřítele je v ServerStorage, uvnitř Enemy. DAMAGE věže je nahoře ve skriptu Tower.
  • Dobrý první cíl: základna má přežít dvě minuty se dvěma věžemi.
Tenhle krok mi nefunguje

Nejdřív zkontroluj tyto tři věci

  • Název každého Partu a skriptu je přesně jako v návodu, se stejnými velkými písmeny.
  • Skript leží ve správném objektu. Podívej se na popisek nad polem s kódem.
  • Otevři okno Output z nabídky Window. Červený text ukáže skript a řádek, na kterém je problém.

Pořád to nejde? Napiš nám →

8
Krok 8 / 8

Zveřejni ji

  1. Vyber File → Publish to Roblox. Dej hře název a krátký popis.
  2. Na webu Creator Hub otevři svou hru a vyplň dotazník Maturity.
  3. Nastav hru na Public a pošli odkaz kamarádovi.

Více podrobností

  • Když hru zveřejňuješ poprvé, Studio se zeptá na název a popis. Klikni na Create.
  • Creator Hub je web create.roblox.com. Přihlas se stejným účtem a v seznamu klikni na svou hru.
  • Roblox může před zveřejněním hry chtít něco navíc, například ověření věku u účtu. Stránka ti řekne, co chybí.
  • Pokud je ti méně než 18, udělej tento krok společně s rodičem.
Tip. Ukaž hru kamarádovi a zeptej se na jedno: byla moc lehká, nebo moc těžká? Pak změň jedno číslo a zkus to znovu.
Tenhle krok mi nefunguje

Nejdřív zkontroluj tyto tři věci

  • Název každého Partu a skriptu je přesně jako v návodu, se stejnými velkými písmeny.
  • Skript leží ve správném objektu. Podívej se na popisek nad polem s kódem.
  • Otevři okno Output z nabídky Window. Červený text ukáže skript a řádek, na kterém je problém.

Pořád to nejde? Napiš nám →

Teď to změň sám

  • Přidej druhou věž s krátkým dosahem a DAMAGE 2.
  • Zrychluj vlny postupem času. Nápověda: drž dobu čekání v proměnné a po každém nepříteli ji trochu zmenši.
  • Dej základně 20 zdraví a nech každého nepřítele ubrat 2.