← Όλοι οι οδηγοί
Οδηγός 4

Φτιάξε το πρώτο σου tower defense

Οι εχθροί περπατούν κατά μήκος ενός μονοπατιού προς τη βάση σου και ένας πύργος πυροβολεί τον πιο κοντινό.

Δωρεάν60 λεπτά · Αρχάριος · Roblox Studio
1
Βήμα 1 / 8

Ετοίμασε το place

  1. Άνοιξε το Roblox Studio, κάνε κλικ στο New Experience και διάλεξε το πρότυπο Baseplate.
  2. Στο Explorer πέρασε το ποντίκι πάνω από το Workspace, κάνε κλικ στο + και πρόσθεσε ένα Folder. Ονόμασέ το Path.
  3. Πρόσθεσε ένα δεύτερο Folder στο Workspace και ονόμασέ το Enemies. Άφησέ το άδειο. Οι εχθροί θα εμφανίζονται μέσα του κατά τη διάρκεια του παιχνιδιού.

Περισσότερες λεπτομέρειες

  • Το πρότυπο Baseplate βρίσκεται στη λίστα με τα πρότυπα στην αρχική οθόνη.
  • Όταν κάνεις κλικ στο +, γράψε τη λέξη Folder για να το βρεις γρήγορα. Μετονόμασε έναν φάκελο με F2.
  • Τα ονόματα πρέπει να είναι ακριβώς Path και Enemies, με κεφαλαίο το πρώτο γράμμα. Τα script ψάχνουν αυτά τα ονόματα.
  • Σε Mac, χρησιμοποίησε το πλήκτρο Cmd κάθε φορά που ο οδηγός λέει Ctrl.
Αυτό το βήμα δεν δουλεύει σε μένα

Έλεγξε πρώτα αυτά τα τρία πράγματα

  • Το όνομα κάθε Part και κάθε script είναι ακριβώς όπως στον οδηγό, με τα ίδια κεφαλαία γράμματα.
  • Το script βρίσκεται μέσα στο σωστό αντικείμενο. Κοίτα την ετικέτα πάνω από το πλαίσιο του κώδικα.
  • Άνοιξε το παράθυρο Output από το μενού Window. Το κόκκινο κείμενο δείχνει το script και τη γραμμή με το πρόβλημα.

Κόλλησες ακόμα; Γράψε μας →

2
Βήμα 2 / 8

Φτιάξε το μονοπάτι

  1. Πρόσθεσε ένα Part. Βάλε Size 6, 1, 6, ενεργοποίησε το Anchored και σύρε το μέσα στο φάκελο Path. Ονόμασέ το 1.
  2. Αντίγραψέ το με Ctrl+D και μετακίνησε το αντίγραφο περίπου 30 studs μακριά. Ονόμασέ το 2.
  3. Επανάλαβε μέχρι να έχεις 5 Part με ονόματα 1, 2, 3, 4 και 5. Τοποθέτησέ τα ώστε η διαδρομή να έχει μερικές στροφές.
  4. Οι εχθροί θα πηγαίνουν από το 1 στο 2 και μετά στο 3 και ούτω καθεξής, σε ευθεία γραμμή ανάμεσα σε κάθε ζευγάρι.

Περισσότερες λεπτομέρειες

  • Για να βάλεις ένα Part μέσα στον φάκελο, τράβηξε το όνομά του στο Explorer πάνω στο όνομα Path.
  • Ένα αντίγραφο που φτιάχνεται με Ctrl+D βρίσκεται ήδη μέσα στον φάκελο Path. Χρειάζεται μόνο να το μετακινήσεις και να το μετονομάσεις.
  • Τα ονόματα είναι απλώς οι αριθμοί: 1, 2, 3, 4, 5. Χωρίς γράμματα και χωρίς κενά.
  • Άφησε τα κομμάτια ακουμπισμένα στο δάπεδο. Οι εχθροί αιωρούνται 2 studs πάνω από αυτά.
Συνηθισμένο λάθος. Να παραλείψεις έναν αριθμό. Αν λείπει το Part 3, οι εχθροί σταματούν στο Part 2 και το script δείχνει σφάλμα.
Αυτό το βήμα δεν δουλεύει σε μένα

Έλεγξε πρώτα αυτά τα τρία πράγματα

  • Το όνομα κάθε Part και κάθε script είναι ακριβώς όπως στον οδηγό, με τα ίδια κεφαλαία γράμματα.
  • Το script βρίσκεται μέσα στο σωστό αντικείμενο. Κοίτα την ετικέτα πάνω από το πλαίσιο του κώδικα.
  • Άνοιξε το παράθυρο Output από το μενού Window. Το κόκκινο κείμενο δείχνει το script και τη γραμμή με το πρόβλημα.

Κόλλησες ακόμα; Γράψε μας →

3
Βήμα 3 / 8

Δημιούργησε τον εχθρό

  1. Πρόσθεσε ένα Part. Βάλε Shape σε Ball και Size 3, 3, 3 και κάν' το κόκκινο. Ενεργοποίησε το Anchored, απενεργοποίησε το CanCollide και ονόμασέ το Enemy.
  2. Πέρασε το ποντίκι πάνω από το Enemy, κάνε κλικ στο + και πρόσθεσε ένα IntValue. Ονόμασέ το Health και βάλε στο Value του 3.
  3. Σύρε το Enemy στο ServerStorage. Τώρα είναι ένα πρότυπο. Το παιχνίδι θα φτιάχνει αντίγραφά του.

Περισσότερες λεπτομέρειες

  • Το Shape είναι μια λίστα στο Properties. Κάνε κλικ πάνω της και διάλεξε Ball.
  • Το CanCollide είναι ένα τετραγωνάκι στο Properties. Χωρίς τικ, οι παίκτες και τα άλλα Part περνούν μέσα από τον εχθρό.
  • Όταν κάνεις κλικ στο +, γράψε IntValue για να το βρεις. Κάνε κλικ στο νέο IntValue και άλλαξε το Name σε Health και το Value σε 3 στο Properties.
  • Αφού σύρεις το Enemy στο ServerStorage, χάνεται από το Viewport. Αυτό είναι σωστό.
Συμβουλή. Ο εχθρός έχει Anchored επειδή τον κινεί ένα script. Τα Part με Anchored αγνοούν τη βαρύτητα και τις ωθήσεις.
Αυτό το βήμα δεν δουλεύει σε μένα

Έλεγξε πρώτα αυτά τα τρία πράγματα

  • Το όνομα κάθε Part και κάθε script είναι ακριβώς όπως στον οδηγό, με τα ίδια κεφαλαία γράμματα.
  • Το script βρίσκεται μέσα στο σωστό αντικείμενο. Κοίτα την ετικέτα πάνω από το πλαίσιο του κώδικα.
  • Άνοιξε το παράθυρο Output από το μενού Window. Το κόκκινο κείμενο δείχνει το script και τη γραμμή με το πρόβλημα.

Κόλλησες ακόμα; Γράψε μας →

4
Βήμα 4 / 8

Φτιάξε τη βάση

  1. Πρόσθεσε ένα μεγάλο Part στο τέλος του μονοπατιού, δίπλα στο Part 5. Ενεργοποίησε το Anchored και ονόμασέ το Base.
  2. Πέρασε το ποντίκι πάνω από το Base, κάνε κλικ στο + και πρόσθεσε ένα IntValue. Ονόμασέ το Health και βάλε στο Value του 10.
  3. Πρόσθεσε ένα BillboardGui στο Base με Size {0, 200}, {0, 50} και StudsOffset 0, 8, 0. Πρόσθεσε μέσα του ένα TextLabel με Size {1, 0}, {1, 0} και TextScaled ενεργό.
  4. Πρόσθεσε ένα Script στο Base και επικόλλησε αυτόν τον κώδικα.
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()

Τι κάνει κάθε κομμάτι

  • Το Changed τρέχει κάθε φορά που αλλάζει η τιμή του Health.
  • Η συνάρτηση update γράφει τον νέο αριθμό στην ετικέτα πάνω από τη βάση.
  • Όταν το Health φτάσει στο 0, η ετικέτα δείχνει Game over και το σενάριο Waves σταματά να στέλνει εχθρούς.

Περισσότερες λεπτομέρειες

  • Το μέγεθος 10, 10, 10 είναι μια καλή βάση. Κάθε χρώμα κάνει.
  • Το Health της βάσης είναι άλλο αντικείμενο από το Health του εχθρού. Το καθένα βρίσκεται μέσα στο δικό του Part.
  • Για το Size και το StudsOffset, γράψε τους αριθμούς ακριβώς όπως φαίνονται, με τις αγκύλες και τα κόμματα, και πάτα Enter.
  • Για δοκιμή: πάτα F5. Η ετικέτα πάνω από τη βάση δείχνει Base: 10.
Αυτό το βήμα δεν δουλεύει σε μένα

Έλεγξε πρώτα αυτά τα τρία πράγματα

  • Το όνομα κάθε Part και κάθε script είναι ακριβώς όπως στον οδηγό, με τα ίδια κεφαλαία γράμματα.
  • Το script βρίσκεται μέσα στο σωστό αντικείμενο. Κοίτα την ετικέτα πάνω από το πλαίσιο του κώδικα.
  • Άνοιξε το παράθυρο Output από το μενού Window. Το κόκκινο κείμενο δείχνει το script και τη γραμμή με το πρόβλημα.

Κόλλησες ακόμα; Γράψε μας →

5
Βήμα 5 / 8

Στείλε τα κύματα

  1. Πέρασε το ποντίκι πάνω από το ServerScriptService, κάνε κλικ στο + και πρόσθεσε ένα Script. Ονόμασέ το Waves.
  2. Σβήσε τη γραμμή που υπάρχει ήδη και επικόλλησε αυτόν τον κώδικα.
  3. Πάτα Play. Κάθε 3 δευτερόλεπτα εμφανίζεται μια κόκκινη μπάλα στο Part 1 και κινείται κατά μήκος του μονοπατιού. Όταν φτάσει στο τέλος, η βάση χάνει 1 ζωή.
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

Τι κάνει κάθε κομμάτι

  • Το Clone φτιάχνει αντίγραφο του προτύπου Enemy από το ServerStorage.
  • Η συνάρτηση walk μετακινεί τον εχθρό σε κάθε Part του μονοπατιού με τη σειρά. Το distance / SPEED κρατά την ίδια ταχύτητα σε μεγάλες και μικρές αποστάσεις.
  • Το task.spawn αφήνει κάθε εχθρό να περπατά μόνος του, ώστε ο βρόχος να συνεχίσει να στέλνει νέους.

Περισσότερες λεπτομέρειες

  • Το script ανοίγει σε νέα καρτέλα. Κάνε κλικ μέσα στον κώδικα, πάτα Ctrl+A και μετά Ctrl+V για να αντικαταστήσεις τα πάντα.
  • Οι εχθροί εμφανίζονται μέσα στον φάκελο Enemies όσο τρέχει το παιχνίδι. Μπορείς να τους παρακολουθείς στο Explorer.
  • Χωρίς ακόμα κανέναν πύργο, κάθε εχθρός φτάνει στη βάση. Μετά από 10 εχθρούς η ετικέτα δείχνει Game over και δεν έρχονται άλλοι εχθροί.
  • Κόκκινο κείμενο στο Output για ένα όνομα που λείπει σημαίνει ότι ένα Part του μονοπατιού ή ένας φάκελος έχει λάθος όνομα.
Αυτό το βήμα δεν δουλεύει σε μένα

Έλεγξε πρώτα αυτά τα τρία πράγματα

  • Το όνομα κάθε Part και κάθε script είναι ακριβώς όπως στον οδηγό, με τα ίδια κεφαλαία γράμματα.
  • Το script βρίσκεται μέσα στο σωστό αντικείμενο. Κοίτα την ετικέτα πάνω από το πλαίσιο του κώδικα.
  • Άνοιξε το παράθυρο Output από το μενού Window. Το κόκκινο κείμενο δείχνει το script και τη γραμμή με το πρόβλημα.

Κόλλησες ακόμα; Γράψε μας →

6
Βήμα 6 / 8

Φτιάξε τον πύργο

  1. Πρόσθεσε ένα Part κοντά σε μια στροφή του μονοπατιού. Βάλε Size 4, 8, 4, ενεργοποίησε το Anchored και ονόμασέ το Tower.
  2. Πρόσθεσε ένα Script στο Tower και επικόλλησε αυτόν τον κώδικα.
  3. Πάτα Play. Μία φορά το δευτερόλεπτο ο πύργος χτυπά τον πιο κοντινό εχθρό που βρίσκεται σε εμβέλεια. Ο εχθρός αναβοσβήνει λευκός και μετά από 3 χτυπήματα εξαφανίζεται.
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

Τι κάνει κάθε κομμάτι

  • Ο βρόχος μετράει την απόσταση από τον πύργο σε κάθε εχθρό και θυμάται τον πιο κοντινό.
  • Το RANGE είναι πόσο μακριά φτάνει ο πύργος. Το DAMAGE είναι πόση ζωή αφαιρεί ένα χτύπημα.
  • Όταν το Health φτάσει στο 0, το Destroy αφαιρεί τον εχθρό.

Περισσότερες λεπτομέρειες

  • Βάλε τον πύργο 8 έως 12 studs από το μονοπάτι. Η εμβέλεια είναι 25 studs προς κάθε κατεύθυνση.
  • Ένας πύργος χρειάζεται 3 δευτερόλεπτα για έναν εχθρό και ένας νέος εχθρός έρχεται κάθε 3 δευτερόλεπτα. Άρα ένας πύργος μπορεί να κρατήσει το μονοπάτι μόνο αν οι εχθροί μένουν αρκετή ώρα εντός εμβέλειας.
  • Η λευκή λάμψη διαρκεί ένα δέκατο του δευτερολέπτου. Κοίτα προσεκτικά για να τη δεις.
  • Για δεύτερο πύργο, διάλεξε το Tower και πάτα Ctrl+D και μετά μετακίνησε το αντίγραφο. Το script έρχεται μαζί του.
Συμβουλή. Ένας πύργος δουλεύει καλύτερα δίπλα σε στροφή, γιατί εκεί οι εχθροί μένουν περισσότερο σε εμβέλεια.
Αυτό το βήμα δεν δουλεύει σε μένα

Έλεγξε πρώτα αυτά τα τρία πράγματα

  • Το όνομα κάθε Part και κάθε script είναι ακριβώς όπως στον οδηγό, με τα ίδια κεφαλαία γράμματα.
  • Το script βρίσκεται μέσα στο σωστό αντικείμενο. Κοίτα την ετικέτα πάνω από το πλαίσιο του κώδικα.
  • Άνοιξε το παράθυρο Output από το μενού Window. Το κόκκινο κείμενο δείχνει το script και τη γραμμή με το πρόβλημα.

Κόλλησες ακόμα; Γράψε μας →

7
Βήμα 7 / 8

Δοκίμασε και ισορρόπησε

  1. Πάτα F5 και δες μερικά κύματα.
  2. Αν κανένας εχθρός δεν φτάνει ποτέ στη βάση, το παιχνίδι είναι πολύ εύκολο. Αν η βάση χάνει γρήγορα όλη της τη ζωή, είναι πολύ δύσκολο.
  3. Ισορρόπησέ το με τρεις αριθμούς: τον χρόνο αναμονής στο Waves, την τιμή Health του εχθρού και το DAMAGE του πύργου.
  4. Πάτα Shift+F5 για να σταματήσεις. Αν κάτι αποτύχει, άνοιξε το παράθυρο Output από το μενού Window και διάβασε το κόκκινο κείμενο.

Περισσότερες λεπτομέρειες

  • Άλλαζε μόνο έναν αριθμό τη φορά και μετά παίξε ξανά. Αλλιώς δεν ξέρεις ποια αλλαγή βοήθησε.
  • Ο χρόνος αναμονής είναι ο αριθμός στο task.wait(3) κοντά στο τέλος του script Waves. Ένας μικρότερος αριθμός στέλνει τους εχθρούς πιο γρήγορα.
  • Το Health του εχθρού βρίσκεται στο ServerStorage, μέσα στο Enemy. Το DAMAGE του πύργου βρίσκεται στην αρχή του script Tower.
  • Ένας καλός πρώτος στόχος: η βάση να αντέξει δύο λεπτά με δύο πύργους.
Αυτό το βήμα δεν δουλεύει σε μένα

Έλεγξε πρώτα αυτά τα τρία πράγματα

  • Το όνομα κάθε Part και κάθε script είναι ακριβώς όπως στον οδηγό, με τα ίδια κεφαλαία γράμματα.
  • Το script βρίσκεται μέσα στο σωστό αντικείμενο. Κοίτα την ετικέτα πάνω από το πλαίσιο του κώδικα.
  • Άνοιξε το παράθυρο Output από το μενού Window. Το κόκκινο κείμενο δείχνει το script και τη γραμμή με το πρόβλημα.

Κόλλησες ακόμα; Γράψε μας →

8
Βήμα 8 / 8

Δημοσίευσέ το

  1. Διάλεξε File → Publish to Roblox. Δώσε στο παιχνίδι ένα όνομα και μια σύντομη περιγραφή.
  2. Στον ιστότοπο Creator Hub άνοιξε το παιχνίδι σου και συμπλήρωσε το ερωτηματολόγιο Maturity.
  3. Βάλε το παιχνίδι σε Public και στείλε τον σύνδεσμο σε έναν φίλο.

Περισσότερες λεπτομέρειες

  • Την πρώτη φορά που δημοσιεύεις, το Studio ζητά όνομα και περιγραφή. Κάνε κλικ στο Create.
  • Το Creator Hub είναι ο ιστότοπος create.roblox.com. Συνδέσου με τον ίδιο λογαριασμό και κάνε κλικ στο παιχνίδι σου στη λίστα.
  • Η Roblox μπορεί να ζητήσει κι άλλα πριν γίνει ένα παιχνίδι δημόσιο, για παράδειγμα έλεγχο ηλικίας στον λογαριασμό. Η σελίδα σου λέει τι λείπει.
  • Αν είσαι κάτω των 18, κάνε αυτό το βήμα μαζί με έναν γονιό.
Συμβουλή. Δείξε το παιχνίδι σε έναν φίλο και κάνε του μία ερώτηση: ήταν πολύ εύκολο ή πολύ δύσκολο; Μετά άλλαξε έναν αριθμό και δοκίμασε ξανά.
Αυτό το βήμα δεν δουλεύει σε μένα

Έλεγξε πρώτα αυτά τα τρία πράγματα

  • Το όνομα κάθε Part και κάθε script είναι ακριβώς όπως στον οδηγό, με τα ίδια κεφαλαία γράμματα.
  • Το script βρίσκεται μέσα στο σωστό αντικείμενο. Κοίτα την ετικέτα πάνω από το πλαίσιο του κώδικα.
  • Άνοιξε το παράθυρο Output από το μενού Window. Το κόκκινο κείμενο δείχνει το script και τη γραμμή με το πρόβλημα.

Κόλλησες ακόμα; Γράψε μας →

Τώρα άλλαξέ το μόνος σου

  • Πρόσθεσε έναν δεύτερο πύργο με μικρή εμβέλεια και DAMAGE 2.
  • Κάνε τα κύματα να γίνονται πιο γρήγορα με τον καιρό. Βοήθεια: κράτα τον χρόνο αναμονής σε μια μεταβλητή και μίκρυνέ τον λίγο μετά από κάθε εχθρό.
  • Δώσε στη βάση 20 ζωή και κάνε κάθε εχθρό να αφαιρεί 2.