← Toate ghidurile
Ghid 4

Construiește primul tău tower defense

Inamicii merg pe un drum spre baza ta, iar un turn îl împușcă pe cel mai apropiat.

Gratuit60 de minute · Începător · Roblox Studio
1
Pasul 1 / 8

Pregătește locul

  1. Deschide Roblox Studio, apasă New Experience și alege șablonul Baseplate.
  2. În Explorer treci cu mouse-ul peste Workspace, apasă + și adaugă un Folder. Numește-l Path.
  3. Adaugă un al doilea Folder în Workspace și numește-l Enemies. Lasă-l gol. Inamicii vor apărea în el în timpul jocului.

Mai multe detalii

  • Șablonul Baseplate se află în lista de șabloane de pe ecranul de start.
  • Când faci clic pe +, scrie cuvântul Folder ca să îl găsești repede. Redenumește un folder cu F2.
  • Numele trebuie să fie exact Path și Enemies, cu prima literă mare. Scripturile caută aceste nume.
  • Pe un Mac, folosește tasta Cmd de fiecare dată când ghidul spune Ctrl.
Acest pas nu merge la mine

Verifică mai întâi aceste trei lucruri

  • Numele fiecărei piese și al fiecărui script este exact ca în ghid, cu aceleași litere mari.
  • Scriptul se află în obiectul potrivit. Uită-te la eticheta de deasupra casetei cu cod.
  • Deschide fereastra Output din meniul Window. Textul roșu îți arată scriptul și linia cu problema.

Tot nu merge? Scrie-ne →

2
Pasul 2 / 8

Construiește drumul

  1. Adaugă un Part. Setează Size la 6, 1, 6, bifează Anchored și trage-l în folderul Path. Numește-l 1.
  2. Dublează-l cu Ctrl+D și mută copia la vreo 30 de studs distanță. Numește-o 2.
  3. Repetă până ai 5 piese numite 1, 2, 3, 4 și 5. Pune-le așa încât drumul să aibă câteva coturi.
  4. Inamicii vor merge de la 1 la 2, la 3 și tot așa, în linie dreaptă între fiecare pereche.

Mai multe detalii

  • Ca să pui o piesă în folder, trage numele ei din Explorer peste numele Path.
  • O copie făcută cu Ctrl+D este deja în folderul Path. Trebuie doar să o muți și să o redenumești.
  • Numele sunt doar numerele: 1, 2, 3, 4, 5. Fără litere și fără spații.
  • Lasă piesele culcate pe podea. Inamicii plutesc la 2 studs deasupra lor.
Greșeală frecventă. Ai sărit peste un număr. Dacă lipsește piesa 3, inamicii se opresc la piesa 2 și scriptul arată o eroare.
Acest pas nu merge la mine

Verifică mai întâi aceste trei lucruri

  • Numele fiecărei piese și al fiecărui script este exact ca în ghid, cu aceleași litere mari.
  • Scriptul se află în obiectul potrivit. Uită-te la eticheta de deasupra casetei cu cod.
  • Deschide fereastra Output din meniul Window. Textul roșu îți arată scriptul și linia cu problema.

Tot nu merge? Scrie-ne →

3
Pasul 3 / 8

Creează inamicul

  1. Adaugă un Part. Setează Shape la Ball și Size la 3, 3, 3 și fă-l roșu. Bifează Anchored, debifează CanCollide și numește-l Enemy.
  2. Treci cu mouse-ul peste Enemy, apasă + și adaugă un IntValue. Numește-l Health și setează Value la 3.
  3. Trage Enemy în ServerStorage. Acum este un model. Jocul va face copii după el.

Mai multe detalii

  • Shape este o listă în Properties. Fă clic pe ea și alege Ball.
  • CanCollide este o casetă de bifat în Properties. Fără bifă, jucătorii și alte piese trec prin inamic.
  • Când faci clic pe +, scrie IntValue ca să îl găsești. Fă clic pe noul IntValue, apoi schimbă în Properties Name în Health și Value în 3.
  • După ce tragi Enemy în ServerStorage, el dispare din Viewport. Așa trebuie.
Sfat. Inamicul are Anchored pornit pentru că un script îl mișcă. Piesele cu Anchored pornit ignoră gravitația și loviturile.
Acest pas nu merge la mine

Verifică mai întâi aceste trei lucruri

  • Numele fiecărei piese și al fiecărui script este exact ca în ghid, cu aceleași litere mari.
  • Scriptul se află în obiectul potrivit. Uită-te la eticheta de deasupra casetei cu cod.
  • Deschide fereastra Output din meniul Window. Textul roșu îți arată scriptul și linia cu problema.

Tot nu merge? Scrie-ne →

4
Pasul 4 / 8

Construiește baza

  1. Adaugă un Part mare la capătul drumului, lângă piesa 5. Bifează Anchored și numește-l Base.
  2. Treci cu mouse-ul peste Base, apasă + și adaugă un IntValue. Numește-l Health și setează Value la 10.
  3. Adaugă un BillboardGui la Base cu Size {0, 200}, {0, 50} și StudsOffset 0, 8, 0. Adaugă în el un TextLabel cu Size {1, 0}, {1, 0} și TextScaled pornit.
  4. Adaugă un Script la Base și lipește acest cod.
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()

Ce face fiecare parte

  • Changed pornește de fiecare dată când se schimbă valoarea Health.
  • Funcția update scrie numărul nou pe eticheta de deasupra bazei.
  • Când Health ajunge la 0, eticheta arată Game over, iar scriptul Waves nu mai trimite dușmani.

Mai multe detalii

  • O mărime de 10, 10, 10 este o bază bună. Orice culoare merge.
  • Health-ul bazei este un obiect diferit de Health-ul inamicului. Fiecare se află în propria piesă.
  • Pentru Size și StudsOffset, scrie numerele exact cum sunt arătate, cu paranteze și virgule, și apasă Enter.
  • Ca să testezi: apasă F5. Eticheta de deasupra bazei arată Base: 10.
Acest pas nu merge la mine

Verifică mai întâi aceste trei lucruri

  • Numele fiecărei piese și al fiecărui script este exact ca în ghid, cu aceleași litere mari.
  • Scriptul se află în obiectul potrivit. Uită-te la eticheta de deasupra casetei cu cod.
  • Deschide fereastra Output din meniul Window. Textul roșu îți arată scriptul și linia cu problema.

Tot nu merge? Scrie-ne →

5
Pasul 5 / 8

Trimite valurile

  1. Treci cu mouse-ul peste ServerScriptService, apasă + și adaugă un Script. Numește-l Waves.
  2. Șterge linia care era deja acolo și lipește acest cod.
  3. Apasă Play. La fiecare 3 secunde apare o bilă roșie la piesa 1 și merge pe drum. Când ajunge la capăt, baza pierde 1 viață.
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

Ce face fiecare parte

  • Clone face o copie a modelului Enemy din ServerStorage.
  • Funcția walk mută inamicul la fiecare piesă a drumului, în ordine. distance / SPEED păstrează aceeași viteză pe porțiuni lungi și scurte.
  • task.spawn lasă fiecare inamic să meargă singur, așa că bucla poate continua să trimită alții noi.

Mai multe detalii

  • Scriptul se deschide într-o filă nouă. Fă clic în cod, apasă Ctrl+A și apoi Ctrl+V ca să înlocuiești tot.
  • Inamicii apar în folderul Enemies cât timp rulează jocul. Îi poți urmări în Explorer.
  • Fără niciun turn, fiecare inamic ajunge la bază. După 10 inamici, eticheta arată Game over și nu mai vin inamici.
  • Text roșu în Output despre un nume lipsă înseamnă că o piesă a traseului sau un folder are numele greșit.
Acest pas nu merge la mine

Verifică mai întâi aceste trei lucruri

  • Numele fiecărei piese și al fiecărui script este exact ca în ghid, cu aceleași litere mari.
  • Scriptul se află în obiectul potrivit. Uită-te la eticheta de deasupra casetei cu cod.
  • Deschide fereastra Output din meniul Window. Textul roșu îți arată scriptul și linia cu problema.

Tot nu merge? Scrie-ne →

6
Pasul 6 / 8

Construiește turnul

  1. Adaugă un Part lângă un cot al drumului. Setează Size la 4, 8, 4, bifează Anchored și numește-l Tower.
  2. Adaugă un Script la Tower și lipește acest cod.
  3. Apasă Play. O dată pe secundă, turnul lovește cel mai apropiat inamic aflat în rază. Inamicul clipește alb, iar după 3 lovituri dispare.
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

Ce face fiecare parte

  • Bucla măsoară distanța de la turn la fiecare inamic și ține minte cel mai apropiat.
  • RANGE este cât de departe ajunge turnul. DAMAGE este câtă viață scoate o lovitură.
  • Când Health ajunge la 0, Destroy scoate inamicul.

Mai multe detalii

  • Pune turnul la 8 până la 12 studs de traseu. Raza de acțiune este de 25 de studs în toate direcțiile.
  • Un turn are nevoie de 3 secunde pentru un inamic, iar un inamic nou vine la fiecare 3 secunde. Deci un turn poate ține traseul doar dacă inamicii rămân destul timp în rază.
  • Sclipirea albă durează o zecime de secundă. Uită-te cu atenție ca să o vezi.
  • Pentru un al doilea turn, selectează Tower și apasă Ctrl+D, apoi mută copia. Scriptul vine odată cu ea.
Sfat. Un turn merge cel mai bine lângă un cot, pentru că acolo inamicii rămân mai mult timp în rază.
Acest pas nu merge la mine

Verifică mai întâi aceste trei lucruri

  • Numele fiecărei piese și al fiecărui script este exact ca în ghid, cu aceleași litere mari.
  • Scriptul se află în obiectul potrivit. Uită-te la eticheta de deasupra casetei cu cod.
  • Deschide fereastra Output din meniul Window. Textul roșu îți arată scriptul și linia cu problema.

Tot nu merge? Scrie-ne →

7
Pasul 7 / 8

Testează și echilibrează

  1. Apasă F5 și urmărește câteva valuri.
  2. Dacă niciun inamic nu ajunge vreodată la bază, jocul este prea ușor. Dacă baza își pierde repede toată viața, este prea greu.
  3. Echilibrează-l cu trei numere: timpul de așteptare din Waves, valoarea Health a inamicului și DAMAGE a turnului.
  4. Apasă Shift+F5 ca să oprești. Dacă ceva nu merge, deschide fereastra Output din meniul Window și citește textul roșu.

Mai multe detalii

  • Schimbă doar un număr odată, apoi joacă din nou. Altfel nu știi care schimbare a ajutat.
  • Timpul de așteptare este numărul din task.wait(3) spre sfârșitul scriptului Waves. Un număr mai mic trimite inamicii mai repede.
  • Health-ul inamicului este în ServerStorage, în Enemy. DAMAGE-ul turnului este la începutul scriptului Tower.
  • Un prim scop bun: baza să reziste două minute cu două turnuri.
Acest pas nu merge la mine

Verifică mai întâi aceste trei lucruri

  • Numele fiecărei piese și al fiecărui script este exact ca în ghid, cu aceleași litere mari.
  • Scriptul se află în obiectul potrivit. Uită-te la eticheta de deasupra casetei cu cod.
  • Deschide fereastra Output din meniul Window. Textul roșu îți arată scriptul și linia cu problema.

Tot nu merge? Scrie-ne →

8
Pasul 8 / 8

Publică-l

  1. Alege File → Publish to Roblox. Dă jocului un nume și o descriere scurtă.
  2. Pe site-ul Creator Hub deschide jocul tău și completează chestionarul Maturity.
  3. Setează jocul pe Public și trimite linkul unui prieten.

Mai multe detalii

  • Prima dată când publici, Studio îți cere un nume și o descriere. Fă clic pe Create.
  • Creator Hub este site-ul create.roblox.com. Conectează-te cu același cont și fă clic pe jocul tău din listă.
  • Roblox poate cere mai mult înainte ca un joc să devină public, de exemplu o verificare a vârstei pentru cont. Pagina îți spune ce lipsește.
  • Dacă ai sub 18 ani, fă acest pas împreună cu un părinte.
Sfat. Arată jocul unui prieten și pune-i o singură întrebare: a fost prea ușor sau prea greu? Apoi schimbă un număr și testează din nou.
Acest pas nu merge la mine

Verifică mai întâi aceste trei lucruri

  • Numele fiecărei piese și al fiecărui script este exact ca în ghid, cu aceleași litere mari.
  • Scriptul se află în obiectul potrivit. Uită-te la eticheta de deasupra casetei cu cod.
  • Deschide fereastra Output din meniul Window. Textul roșu îți arată scriptul și linia cu problema.

Tot nu merge? Scrie-ne →

Acum schimbă tu codul

  • Adaugă un al doilea turn cu rază scurtă și DAMAGE 2.
  • Fă valurile să se grăbească în timp. Indiciu: ține timpul de așteptare într-o variabilă și fă-l puțin mai mic după fiecare inamic.
  • Dă bazei 20 de vieți și fă fiecare inamic să scoată 2.