← Wszystkie poradniki
Poradnik 4

Zbuduj swój pierwszy tower defense

Wrogowie idą ścieżką do twojej bazy, a wieża strzela do najbliższego z nich.

Za darmo60 minut · Dla początkujących · Roblox Studio
1
Krok 1 / 8

Przygotuj miejsce

  1. Otwórz Roblox Studio, kliknij New Experience i wybierz szablon Baseplate.
  2. W Explorer najedź na Workspace, kliknij + i dodaj Folder. Nazwij go Path.
  3. Dodaj do Workspace drugi Folder i nazwij go Enemies. Zostaw go pustego. Wrogowie pojawią się w nim podczas gry.

Więcej szczegółów

  • Szablon Baseplate jest na liście szablonów na ekranie startowym.
  • Po kliknięciu + wpisz słowo Folder, żeby szybko go znaleźć. Nazwę folderu zmieniasz klawiszem F2.
  • Nazwy muszą brzmieć dokładnie Path i Enemies, z wielką pierwszą literą. Skrypty szukają właśnie tych nazw.
  • Na Mac używaj klawisza Cmd za każdym razem, gdy poradnik mówi Ctrl.
Ten krok mi nie działa

Najpierw sprawdź te trzy rzeczy

  • Nazwa każdego klocka i skryptu jest dokładnie taka jak w poradniku, z tymi samymi wielkimi literami.
  • Skrypt jest w odpowiednim obiekcie. Spójrz na podpis nad polem z kodem.
  • Otwórz okno Output z menu Window. Czerwony tekst pokazuje skrypt i linijkę, w której jest problem.

Nadal nie działa? Napisz do nas →

2
Krok 2 / 8

Zbuduj ścieżkę

  1. Dodaj Part. Ustaw Size na 6, 1, 6, włącz Anchored i przeciągnij go do folderu Path. Nazwij go 1.
  2. Skopiuj go przez Ctrl+D i przesuń kopię o około 30 studs dalej. Nazwij ją 2.
  3. Powtarzaj, aż będziesz mieć 5 klocków o nazwach 1, 2, 3, 4 i 5. Ustaw je tak, żeby trasa miała kilka zakrętów.
  4. Wrogowie pójdą od 1 do 2, potem do 3 i tak dalej, w linii prostej między każdą parą.

Więcej szczegółów

  • Żeby włożyć klocek do folderu, przeciągnij jego nazwę w Explorer na nazwę Path.
  • Kopia zrobiona przez Ctrl+D jest już w folderze Path. Wystarczy ją przesunąć i zmienić jej nazwę.
  • Nazwy to same liczby: 1, 2, 3, 4, 5. Bez liter i bez spacji.
  • Zostaw klocki leżące na podłodze. Wrogowie unoszą się 2 studs nad nimi.
Częsty błąd. Pominięcie numeru. Jeśli brakuje klocka 3, wrogowie zatrzymają się przy klocku 2, a skrypt pokaże błąd.
Ten krok mi nie działa

Najpierw sprawdź te trzy rzeczy

  • Nazwa każdego klocka i skryptu jest dokładnie taka jak w poradniku, z tymi samymi wielkimi literami.
  • Skrypt jest w odpowiednim obiekcie. Spójrz na podpis nad polem z kodem.
  • Otwórz okno Output z menu Window. Czerwony tekst pokazuje skrypt i linijkę, w której jest problem.

Nadal nie działa? Napisz do nas →

3
Krok 3 / 8

Stwórz wroga

  1. Dodaj Part. Ustaw Shape na Ball, Size na 3, 3, 3 i zrób go czerwonym. Włącz Anchored, wyłącz CanCollide i nazwij go Enemy.
  2. Najedź na Enemy, kliknij + i dodaj IntValue. Nazwij go Health i ustaw jego Value na 3.
  3. Przeciągnij Enemy do ServerStorage. To jest teraz wzór. Gra będzie robić jego kopie.

Więcej szczegółów

  • Shape to lista w Properties. Kliknij ją i wybierz Ball.
  • CanCollide to pole wyboru w Properties. Bez ptaszka gracze i inne klocki przechodzą przez wroga.
  • Po kliknięciu + wpisz IntValue, żeby go znaleźć. Kliknij nowy IntValue, a potem w Properties zmień Name na Health i Value na 3.
  • Gdy przeciągniesz Enemy do ServerStorage, znika z Viewport. To jest poprawne.
Wskazówka. Wróg ma włączone Anchored, bo porusza go skrypt. Klocki z Anchored ignorują grawitację i popchnięcia.
Ten krok mi nie działa

Najpierw sprawdź te trzy rzeczy

  • Nazwa każdego klocka i skryptu jest dokładnie taka jak w poradniku, z tymi samymi wielkimi literami.
  • Skrypt jest w odpowiednim obiekcie. Spójrz na podpis nad polem z kodem.
  • Otwórz okno Output z menu Window. Czerwony tekst pokazuje skrypt i linijkę, w której jest problem.

Nadal nie działa? Napisz do nas →

4
Krok 4 / 8

Zbuduj bazę

  1. Dodaj duży Part na końcu ścieżki, obok klocka 5. Włącz Anchored i nazwij go Base.
  2. Najedź na Base, kliknij + i dodaj IntValue. Nazwij go Health i ustaw jego Value na 10.
  3. Dodaj do Base BillboardGui z Size {0, 200}, {0, 50} i StudsOffset 0, 8, 0. Dodaj do niego TextLabel z Size {1, 0}, {1, 0} i włączonym TextScaled.
  4. Dodaj do Base Script i wklej ten kod.
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 robi każda część

  • Changed uruchamia się za każdym razem, gdy zmienia się wartość Health.
  • Funkcja update wpisuje nową liczbę na napis nad bazą.
  • Gdy Health spadnie do 0, napis pokazuje Game over, a skrypt Waves przestaje wysyłać wrogów.

Więcej szczegółów

  • Rozmiar 10, 10, 10 to dobra baza. Pasuje każdy kolor.
  • Health bazy to inny obiekt niż Health wroga. Każdy z nich jest w swoim własnym klocku.
  • Przy Size i StudsOffset wpisz liczby dokładnie tak, jak pokazano, z nawiasami i przecinkami, i naciśnij Enter.
  • Test: naciśnij F5. Napis nad bazą pokazuje Base: 10.
Ten krok mi nie działa

Najpierw sprawdź te trzy rzeczy

  • Nazwa każdego klocka i skryptu jest dokładnie taka jak w poradniku, z tymi samymi wielkimi literami.
  • Skrypt jest w odpowiednim obiekcie. Spójrz na podpis nad polem z kodem.
  • Otwórz okno Output z menu Window. Czerwony tekst pokazuje skrypt i linijkę, w której jest problem.

Nadal nie działa? Napisz do nas →

5
Krok 5 / 8

Wyślij fale

  1. Najedź na ServerScriptService, kliknij + i dodaj Script. Nazwij go Waves.
  2. Usuń linijkę, która już tam jest, i wklej ten kod.
  3. Naciśnij Play. Co 3 sekundy przy klocku 1 pojawia się czerwona kula i rusza ścieżką. Gdy dojdzie do końca, baza traci 1 zdrowia.
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 robi każda część

  • Clone robi kopię wzoru Enemy z ServerStorage.
  • Funkcja walk przesuwa wroga do kolejnych klocków ścieżki. distance / SPEED sprawia, że prędkość jest taka sama na długich i krótkich odcinkach.
  • task.spawn pozwala każdemu wrogowi iść samodzielnie, więc pętla może wysyłać kolejnych.

Więcej szczegółów

  • Skrypt otwiera się w nowej karcie. Kliknij w kodzie, naciśnij Ctrl+A, a potem Ctrl+V, żeby wszystko zastąpić.
  • Wrogowie pojawiają się w folderze Enemies, gdy gra działa. Możesz ich oglądać w Explorer.
  • Bez wieży każdy wróg dociera do bazy. Po 10 wrogach napis pokazuje Game over i nowi wrogowie już nie przychodzą.
  • Czerwony tekst w Output o brakującej nazwie znaczy, że któryś klocek ścieżki albo folder ma złą nazwę.
Ten krok mi nie działa

Najpierw sprawdź te trzy rzeczy

  • Nazwa każdego klocka i skryptu jest dokładnie taka jak w poradniku, z tymi samymi wielkimi literami.
  • Skrypt jest w odpowiednim obiekcie. Spójrz na podpis nad polem z kodem.
  • Otwórz okno Output z menu Window. Czerwony tekst pokazuje skrypt i linijkę, w której jest problem.

Nadal nie działa? Napisz do nas →

6
Krok 6 / 8

Zbuduj wieżę

  1. Dodaj Part blisko zakrętu ścieżki. Ustaw Size na 4, 8, 4, włącz Anchored i nazwij go Tower.
  2. Dodaj do Tower Script i wklej ten kod.
  3. Naciśnij Play. Raz na sekundę wieża uderza najbliższego wroga w zasięgu. Wróg błyska na biało, a po 3 uderzeniach znika.
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 robi każda część

  • Pętla mierzy odległość od wieży do każdego wroga i zapamiętuje najbliższego.
  • RANGE to jak daleko sięga wieża. DAMAGE to ile zdrowia zabiera jedno uderzenie.
  • Gdy Health dojdzie do 0, Destroy usuwa wroga.

Więcej szczegółów

  • Postaw wieżę 8 do 12 studs od ścieżki. Zasięg to 25 studs w każdą stronę.
  • Jedna wieża potrzebuje 3 sekund na jednego wroga, a nowy wróg przychodzi co 3 sekundy. Więc jedna wieża utrzyma ścieżkę tylko wtedy, gdy wrogowie zostają w zasięgu wystarczająco długo.
  • Biały błysk trwa jedną dziesiątą sekundy. Patrz uważnie, żeby go zobaczyć.
  • Żeby zrobić drugą wieżę, zaznacz Tower i naciśnij Ctrl+D, a potem przesuń kopię. Skrypt idzie razem z nią.
Wskazówka. Wieża działa najlepiej obok zakrętu, bo wrogowie zostają tam dłużej w zasięgu.
Ten krok mi nie działa

Najpierw sprawdź te trzy rzeczy

  • Nazwa każdego klocka i skryptu jest dokładnie taka jak w poradniku, z tymi samymi wielkimi literami.
  • Skrypt jest w odpowiednim obiekcie. Spójrz na podpis nad polem z kodem.
  • Otwórz okno Output z menu Window. Czerwony tekst pokazuje skrypt i linijkę, w której jest problem.

Nadal nie działa? Napisz do nas →

7
Krok 7 / 8

Testuj i wyważ grę

  1. Naciśnij F5 i obejrzyj kilka fal.
  2. Jeśli żaden wróg nigdy nie dochodzi do bazy, gra jest za łatwa. Jeśli baza szybko traci całe zdrowie, jest za trudna.
  3. Wyważ ją trzema liczbami: czasem oczekiwania w Waves, wartością Health wroga i DAMAGE wieży.
  4. Naciśnij Shift+F5, żeby zatrzymać grę. Jeśli coś nie działa, otwórz okno Output z menu Window i przeczytaj czerwony tekst.

Więcej szczegółów

  • Zmieniaj tylko jedną liczbę naraz, a potem zagraj jeszcze raz. Inaczej nie wiesz, która zmiana pomogła.
  • Czas oczekiwania to liczba w task.wait(3) blisko końca skryptu Waves. Mniejsza liczba wysyła wrogów szybciej.
  • Health wroga jest w ServerStorage, w Enemy. DAMAGE wieży jest na górze skryptu Tower.
  • Dobry pierwszy cel: baza ma przetrwać dwie minuty z dwiema wieżami.
Ten krok mi nie działa

Najpierw sprawdź te trzy rzeczy

  • Nazwa każdego klocka i skryptu jest dokładnie taka jak w poradniku, z tymi samymi wielkimi literami.
  • Skrypt jest w odpowiednim obiekcie. Spójrz na podpis nad polem z kodem.
  • Otwórz okno Output z menu Window. Czerwony tekst pokazuje skrypt i linijkę, w której jest problem.

Nadal nie działa? Napisz do nas →

8
Krok 8 / 8

Opublikuj grę

  1. Wybierz File → Publish to Roblox. Nadaj grze nazwę i krótki opis.
  2. Na stronie Creator Hub otwórz swoją grę i wypełnij ankietę Maturity.
  3. Ustaw grę jako Public i wyślij link koledze lub koleżance.

Więcej szczegółów

  • Gdy publikujesz pierwszy raz, Studio pyta o nazwę i opis. Kliknij Create.
  • Creator Hub to strona create.roblox.com. Zaloguj się na to samo konto i kliknij swoją grę na liście.
  • Roblox może poprosić o więcej, zanim gra będzie publiczna, na przykład o weryfikację wieku na koncie. Strona powie ci, czego brakuje.
  • Jeśli masz mniej niż 18 lat, zrób ten krok razem z rodzicem.
Wskazówka. Pokaż grę komuś i zadaj jedno pytanie: czy była za łatwa, czy za trudna? Potem zmień jedną liczbę i przetestuj jeszcze raz.
Ten krok mi nie działa

Najpierw sprawdź te trzy rzeczy

  • Nazwa każdego klocka i skryptu jest dokładnie taka jak w poradniku, z tymi samymi wielkimi literami.
  • Skrypt jest w odpowiednim obiekcie. Spójrz na podpis nad polem z kodem.
  • Otwórz okno Output z menu Window. Czerwony tekst pokazuje skrypt i linijkę, w której jest problem.

Nadal nie działa? Napisz do nas →

Teraz zmień to sam

  • Dodaj drugą wieżę z krótkim zasięgiem i DAMAGE 2.
  • Spraw, żeby fale z czasem przyspieszały. Podpowiedź: trzymaj czas oczekiwania w zmiennej i zmniejszaj go trochę po każdym wrogu.
  • Daj bazie 20 zdrowia i spraw, żeby każdy wróg zabierał 2.