← Tutte le guide
Guida 4

Crea il tuo primo tower defense

I nemici camminano lungo un percorso verso la tua base e una torre spara a quello più vicino.

Gratis60 minuti · Principiante · Roblox Studio
1
Passo 1 / 8

Prepara il posto

  1. Apri Roblox Studio, clicca su New Experience e scegli il modello Baseplate.
  2. In Explorer passa il mouse su Workspace, clicca + e aggiungi una Folder. Chiamala Path.
  3. Aggiungi una seconda Folder a Workspace e chiamala Enemies. Lasciala vuota. I nemici appariranno al suo interno durante il gioco.

Più dettagli

  • Il modello Baseplate è nell'elenco dei modelli nella schermata iniziale.
  • Quando clicchi +, scrivi la parola Folder per trovarlo in fretta. Rinomina una cartella con F2.
  • I nomi devono essere esattamente Path ed Enemies, con la prima lettera maiuscola. Gli script cercano questi nomi.
  • Su un Mac usa il tasto Cmd ogni volta che questa guida dice Ctrl.
Questo passo non funziona per me

Controlla prima queste tre cose

  • Il nome di ogni Part e di ogni script è uguale a quello della guida, con le stesse lettere maiuscole.
  • Lo script si trova nell'oggetto giusto. Guarda l'etichetta sopra il riquadro del codice.
  • Apri la finestra Output dal menu Window. Il testo rosso mostra lo script e la riga con il problema.

Sei ancora bloccato? Scrivici →

2
Passo 2 / 8

Costruisci il percorso

  1. Aggiungi una Part. Imposta Size su 6, 1, 6, attiva Anchored e trascinala nella cartella Path. Chiamala 1.
  2. Duplicala con Ctrl+D e sposta la copia di circa 30 studs. Chiamala 2.
  3. Ripeti finché hai 5 Part chiamate 1, 2, 3, 4 e 5. Mettile in modo che il percorso abbia qualche curva.
  4. I nemici andranno da 1 a 2 a 3 e così via, in linea retta tra una coppia e l'altra.

Più dettagli

  • Per mettere una Part nella cartella, trascina il suo nome in Explorer sul nome Path.
  • Una copia fatta con Ctrl+D è già dentro la cartella Path. Devi solo spostarla e rinominarla.
  • I nomi sono solo i numeri: 1, 2, 3, 4, 5. Niente lettere e niente spazi.
  • Lascia i pezzi appoggiati sul pavimento. I nemici galleggiano 2 studs sopra di essi.
Errore comune. Saltare un numero. Se manca la Part 3, i nemici si fermano alla Part 2 e lo script mostra un errore.
Questo passo non funziona per me

Controlla prima queste tre cose

  • Il nome di ogni Part e di ogni script è uguale a quello della guida, con le stesse lettere maiuscole.
  • Lo script si trova nell'oggetto giusto. Guarda l'etichetta sopra il riquadro del codice.
  • Apri la finestra Output dal menu Window. Il testo rosso mostra lo script e la riga con il problema.

Sei ancora bloccato? Scrivici →

3
Passo 3 / 8

Crea il nemico

  1. Aggiungi una Part. Imposta Shape su Ball e Size su 3, 3, 3 e falla rossa. Attiva Anchored, disattiva CanCollide e chiamala Enemy.
  2. Passa il mouse su Enemy, clicca + e aggiungi un IntValue. Chiamalo Health e imposta il suo Value su 3.
  3. Trascina Enemy in ServerStorage. Ora è un modello. Il gioco ne farà delle copie.

Più dettagli

  • Shape è un elenco in Properties. Cliccalo e scegli Ball.
  • CanCollide è una casella in Properties. Senza la spunta, giocatori e altre Part passano attraverso il nemico.
  • Quando clicchi +, scrivi IntValue per trovarlo. Clicca il nuovo IntValue, poi cambia Name in Health e Value in 3 in Properties.
  • Dopo aver trascinato Enemy in ServerStorage, sparisce dal Viewport. È giusto così.
Consiglio. Il nemico ha Anchored attivo perché lo muove uno script. Le Part con Anchored attivo ignorano la gravità e le spinte.
Questo passo non funziona per me

Controlla prima queste tre cose

  • Il nome di ogni Part e di ogni script è uguale a quello della guida, con le stesse lettere maiuscole.
  • Lo script si trova nell'oggetto giusto. Guarda l'etichetta sopra il riquadro del codice.
  • Apri la finestra Output dal menu Window. Il testo rosso mostra lo script e la riga con il problema.

Sei ancora bloccato? Scrivici →

4
Passo 4 / 8

Costruisci la base

  1. Aggiungi una Part grande alla fine del percorso, accanto alla Part 5. Attiva Anchored e chiamala Base.
  2. Passa il mouse su Base, clicca + e aggiungi un IntValue. Chiamalo Health e imposta il suo Value su 10.
  3. Aggiungi un BillboardGui a Base con Size {0, 200}, {0, 50} e StudsOffset 0, 8, 0. Aggiungi dentro un TextLabel con Size {1, 0}, {1, 0} e TextScaled attivo.
  4. Aggiungi uno Script a Base e incolla questo codice.
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()

Che cosa fa ogni parte

  • Changed parte ogni volta che il valore di Health cambia.
  • La funzione update scrive il nuovo numero sull'etichetta sopra la base.
  • Quando Health arriva a 0, l'etichetta mostra Game over e lo script Waves smette di mandare nemici.

Più dettagli

  • Una dimensione di 10, 10, 10 è una buona base. Va bene qualsiasi colore.
  • L'Health della base è un oggetto diverso dall'Health del nemico. Ognuno sta dentro la sua Part.
  • Per Size e StudsOffset scrivi i numeri esattamente come mostrato, con le parentesi e le virgole, e premi Enter.
  • Per provare: premi F5. L'etichetta sopra la base mostra Base: 10.
Questo passo non funziona per me

Controlla prima queste tre cose

  • Il nome di ogni Part e di ogni script è uguale a quello della guida, con le stesse lettere maiuscole.
  • Lo script si trova nell'oggetto giusto. Guarda l'etichetta sopra il riquadro del codice.
  • Apri la finestra Output dal menu Window. Il testo rosso mostra lo script e la riga con il problema.

Sei ancora bloccato? Scrivici →

5
Passo 5 / 8

Manda le ondate

  1. Passa il mouse su ServerScriptService, clicca + e aggiungi uno Script. Chiamalo Waves.
  2. Cancella la riga che c'è già e incolla questo codice.
  3. Premi Play. Ogni 3 secondi appare una palla rossa alla Part 1 e si muove lungo il percorso. Quando arriva alla fine, la base perde 1 di vita.
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

Che cosa fa ogni parte

  • Clone fa una copia del modello Enemy che sta in ServerStorage.
  • La funzione walk muove il nemico verso ogni Part del percorso in ordine. distance / SPEED mantiene la stessa velocità sui tratti lunghi e su quelli corti.
  • task.spawn lascia che ogni nemico cammini per conto suo, così il ciclo può continuare a mandarne di nuovi.

Più dettagli

  • Lo script si apre in una nuova scheda. Clicca dentro il codice, premi Ctrl+A e poi Ctrl+V per sostituire tutto.
  • I nemici compaiono dentro la cartella Enemies mentre il gioco è in funzione. Puoi guardarli in Explorer.
  • Senza ancora nessuna torre, ogni nemico arriva alla base. Dopo 10 nemici l'etichetta mostra Game over e non arrivano più nemici.
  • Il testo rosso in Output su un nome mancante significa che una Part del percorso o una cartella ha il nome sbagliato.
Questo passo non funziona per me

Controlla prima queste tre cose

  • Il nome di ogni Part e di ogni script è uguale a quello della guida, con le stesse lettere maiuscole.
  • Lo script si trova nell'oggetto giusto. Guarda l'etichetta sopra il riquadro del codice.
  • Apri la finestra Output dal menu Window. Il testo rosso mostra lo script e la riga con il problema.

Sei ancora bloccato? Scrivici →

6
Passo 6 / 8

Costruisci la torre

  1. Aggiungi una Part vicino a una curva del percorso. Imposta Size su 4, 8, 4, attiva Anchored e chiamala Tower.
  2. Aggiungi uno Script a Tower e incolla questo codice.
  3. Premi Play. Una volta al secondo la torre colpisce il nemico più vicino nel raggio. Il nemico lampeggia di bianco e dopo 3 colpi sparisce.
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

Che cosa fa ogni parte

  • Il ciclo misura la distanza dalla torre a ogni nemico e ricorda il più vicino.
  • RANGE è la distanza a cui arriva la torre. DAMAGE è quanta vita toglie un colpo.
  • Quando Health arriva a 0, Destroy toglie il nemico.

Più dettagli

  • Metti la torre tra 8 e 12 studs dal percorso. La portata è di 25 studs in ogni direzione.
  • Una torre impiega 3 secondi per un nemico e un nuovo nemico arriva ogni 3 secondi. Quindi una torre sola può tenere il percorso solo se i nemici restano abbastanza a lungo nella portata.
  • Il lampo bianco dura un decimo di secondo. Guarda bene per vederlo.
  • Per una seconda torre, seleziona Tower e premi Ctrl+D, poi sposta la copia. Lo script viene con lei.
Consiglio. Una torre funziona meglio accanto a una curva, perché lì i nemici restano più a lungo nel raggio.
Questo passo non funziona per me

Controlla prima queste tre cose

  • Il nome di ogni Part e di ogni script è uguale a quello della guida, con le stesse lettere maiuscole.
  • Lo script si trova nell'oggetto giusto. Guarda l'etichetta sopra il riquadro del codice.
  • Apri la finestra Output dal menu Window. Il testo rosso mostra lo script e la riga con il problema.

Sei ancora bloccato? Scrivici →

7
Passo 7 / 8

Prova e bilancia

  1. Premi F5 e guarda qualche ondata.
  2. Se nessun nemico arriva mai alla base, il gioco è troppo facile. Se la base perde tutta la vita in fretta, è troppo difficile.
  3. Bilancialo con tre numeri: il tempo di attesa in Waves, il valore di Health del nemico e il DAMAGE della torre.
  4. Premi Shift+F5 per fermare. Se qualcosa non va, apri la finestra Output dal menu Window e leggi il testo rosso.

Più dettagli

  • Cambia un solo numero alla volta, poi gioca di nuovo. Altrimenti non sai quale modifica ha aiutato.
  • Il tempo di attesa è il numero in task.wait(3) verso la fine dello script Waves. Un numero più piccolo manda i nemici più in fretta.
  • L'Health del nemico è in ServerStorage, dentro Enemy. Il DAMAGE della torre è in cima allo script Tower.
  • Un buon primo obiettivo: la base deve sopravvivere due minuti con due torri.
Questo passo non funziona per me

Controlla prima queste tre cose

  • Il nome di ogni Part e di ogni script è uguale a quello della guida, con le stesse lettere maiuscole.
  • Lo script si trova nell'oggetto giusto. Guarda l'etichetta sopra il riquadro del codice.
  • Apri la finestra Output dal menu Window. Il testo rosso mostra lo script e la riga con il problema.

Sei ancora bloccato? Scrivici →

8
Passo 8 / 8

Pubblicalo

  1. Scegli File → Publish to Roblox. Dai al gioco un nome e una breve descrizione.
  2. Sul sito Creator Hub apri il tuo gioco e compila il questionario Maturity.
  3. Imposta il gioco su Public e manda il link a un amico.

Più dettagli

  • La prima volta che pubblichi, Studio ti chiede un nome e una descrizione. Clicca Create.
  • Creator Hub è il sito create.roblox.com. Accedi con lo stesso account e clicca il tuo gioco nell'elenco.
  • Roblox può chiedere altro prima che un gioco possa essere pubblico, per esempio una verifica dell'età sull'account. La pagina ti dice che cosa manca.
  • Se hai meno di 18 anni, fai questo passo insieme a un genitore.
Consiglio. Fai provare il gioco a un amico e fagli una sola domanda: era troppo facile o troppo difficile? Poi cambia un numero e prova di nuovo.
Questo passo non funziona per me

Controlla prima queste tre cose

  • Il nome di ogni Part e di ogni script è uguale a quello della guida, con le stesse lettere maiuscole.
  • Lo script si trova nell'oggetto giusto. Guarda l'etichetta sopra il riquadro del codice.
  • Apri la finestra Output dal menu Window. Il testo rosso mostra lo script e la riga con il problema.

Sei ancora bloccato? Scrivici →

Ora cambialo tu

  • Aggiungi una seconda torre con raggio corto e DAMAGE 2.
  • Rendi le ondate più veloci col tempo. Indizio: tieni il tempo di attesa in una variabile e rendilo un po' più piccolo dopo ogni nemico.
  • Dai alla base 20 di vita e fai in modo che ogni nemico ne tolga 2.