← Alla guider
Guide 4

Bygg ditt första tower defense

Fiender går längs en väg mot din bas, och ett torn skjuter på den som är närmast.

Gratis60 minuter · Nybörjare · Roblox Studio
1
Steg 1 / 8

Gör i ordning platsen

  1. Öppna Roblox Studio, klicka på New Experience och välj mallen Baseplate.
  2. Håll musen över Workspace i Explorer, klicka på + och lägg till en Folder. Döp den till Path.
  3. Lägg till en andra Folder i Workspace och döp den till Enemies. Låt den vara tom. Fienderna dyker upp i den under spelets gång.

Mer detaljer

  • Mallen Baseplate finns i listan med mallar på startsidan.
  • När du klickar på + skriver du ordet Folder för att hitta den snabbt. Byt namn på en mapp med F2.
  • Namnen måste vara exakt Path och Enemies, med stor första bokstav. Skripten letar efter de här namnen.
  • På en Mac använder du tangenten Cmd varje gång den här guiden säger Ctrl.
Det här steget fungerar inte för mig

Kontrollera de här tre sakerna först

  • Namnet på varje del och varje skript är exakt som i guiden, med samma stora bokstäver.
  • Skriptet ligger i rätt objekt. Titta på etiketten ovanför kodrutan.
  • Öppna fönstret Output från menyn Window. Röd text visar skriptet och raden med felet.

Sitter du fortfarande fast? Skriv till oss →

2
Steg 2 / 8

Bygg vägen

  1. Lägg till en Part. Ställ in Size på 6, 1, 6, slå på Anchored och dra den in i mappen Path. Döp den till 1.
  2. Kopiera den med Ctrl+D och flytta kopian ungefär 30 studs bort. Döp den till 2.
  3. Upprepa tills du har 5 delar som heter 1, 2, 3, 4 och 5. Placera dem så att rutten har några svängar.
  4. Fienderna går från 1 till 2 till 3 och så vidare, i en rak linje mellan varje par.

Mer detaljer

  • För att lägga en del i mappen drar du dess namn i Explorer till namnet Path.
  • En kopia som görs med Ctrl+D ligger redan i mappen Path. Du behöver bara flytta den och byta namn på den.
  • Namnen är bara siffrorna: 1, 2, 3, 4, 5. Inga bokstäver och inga mellanslag.
  • Låt delarna ligga på golvet. Fienderna svävar 2 studs ovanför dem.
Vanligt misstag. Du hoppar över ett nummer. Om del 3 saknas stannar fienderna vid del 2 och skriptet visar ett fel.
Det här steget fungerar inte för mig

Kontrollera de här tre sakerna först

  • Namnet på varje del och varje skript är exakt som i guiden, med samma stora bokstäver.
  • Skriptet ligger i rätt objekt. Titta på etiketten ovanför kodrutan.
  • Öppna fönstret Output från menyn Window. Röd text visar skriptet och raden med felet.

Sitter du fortfarande fast? Skriv till oss →

3
Steg 3 / 8

Skapa fienden

  1. Lägg till en Part. Ställ in Shape på Ball och Size på 3, 3, 3 och gör den röd. Slå på Anchored, slå av CanCollide och döp den till Enemy.
  2. Håll musen över Enemy, klicka på + och lägg till ett IntValue. Döp det till Health och ställ in dess Value på 3.
  3. Dra Enemy till ServerStorage. Nu är den en mall. Spelet gör kopior av den.

Mer detaljer

  • Shape är en lista i Properties. Klicka på den och välj Ball.
  • CanCollide är en kryssruta i Properties. Utan bock går spelare och andra delar rakt igenom fienden.
  • När du klickar på + skriver du IntValue för att hitta den. Klicka på den nya IntValue och ändra sedan Name till Health och Value till 3 i Properties.
  • När du har dragit Enemy till ServerStorage är den borta från Viewport. Det är rätt.
Tips. Fienden är Anchored eftersom ett skript flyttar den. Delar med Anchored bryr sig inte om tyngdkraft och knuffar.
Det här steget fungerar inte för mig

Kontrollera de här tre sakerna först

  • Namnet på varje del och varje skript är exakt som i guiden, med samma stora bokstäver.
  • Skriptet ligger i rätt objekt. Titta på etiketten ovanför kodrutan.
  • Öppna fönstret Output från menyn Window. Röd text visar skriptet och raden med felet.

Sitter du fortfarande fast? Skriv till oss →

4
Steg 4 / 8

Bygg basen

  1. Lägg till en stor Part i slutet av vägen, bredvid del 5. Slå på Anchored och döp den till Base.
  2. Håll musen över Base, klicka på + och lägg till ett IntValue. Döp det till Health och ställ in dess Value på 10.
  3. Lägg till en BillboardGui i Base med Size {0, 200}, {0, 50} och StudsOffset 0, 8, 0. Lägg till en TextLabel i den med Size {1, 0}, {1, 0} och TextScaled påslagen.
  4. Lägg till ett Script i Base och klistra in den här koden.
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()

Vad varje del gör

  • Changed körs varje gång värdet Health ändras.
  • Funktionen update skriver det nya talet på texten ovanför basen.
  • När Health når 0 visar texten Game over och skriptet Waves slutar skicka fiender.

Mer detaljer

  • Storleken 10, 10, 10 är en bra bas. Vilken färg som helst fungerar.
  • Basens Health är ett annat objekt än fiendens Health. Var och en ligger i sin egen del.
  • För Size och StudsOffset skriver du talen exakt som de står, med parenteser och kommatecken, och trycker på Enter.
  • För att testa: tryck på F5. Etiketten ovanför basen visar Base: 10.
Det här steget fungerar inte för mig

Kontrollera de här tre sakerna först

  • Namnet på varje del och varje skript är exakt som i guiden, med samma stora bokstäver.
  • Skriptet ligger i rätt objekt. Titta på etiketten ovanför kodrutan.
  • Öppna fönstret Output från menyn Window. Röd text visar skriptet och raden med felet.

Sitter du fortfarande fast? Skriv till oss →

5
Steg 5 / 8

Skicka vågorna

  1. Håll musen över ServerScriptService, klicka på + och lägg till ett Script. Döp det till Waves.
  2. Ta bort raden som redan finns där och klistra in den här koden.
  3. Tryck på Play. Var 3:e sekund dyker en röd boll upp vid del 1 och rör sig längs vägen. När den når slutet förlorar basen 1 i Health.
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

Vad varje del gör

  • Clone gör en kopia av mallen Enemy från ServerStorage.
  • Funktionen walk flyttar fienden till varje del på vägen i ordning. distance / SPEED gör att farten blir densamma på långa och korta sträckor.
  • task.spawn låter varje fiende gå för sig själv, så att loopen kan fortsätta skicka nya.

Mer detaljer

  • Skriptet öppnas i en ny flik. Klicka inne i koden, tryck på Ctrl+A och sedan på Ctrl+V för att byta ut allt.
  • Fiender dyker upp i mappen Enemies medan spelet körs. Du kan följa dem i Explorer.
  • Utan något torn än når varje fiende basen. Efter 10 fiender visar etiketten Game over och inga fler fiender kommer.
  • Röd text i Output om ett namn som saknas betyder att en del av vägen eller en mapp har fel namn.
Det här steget fungerar inte för mig

Kontrollera de här tre sakerna först

  • Namnet på varje del och varje skript är exakt som i guiden, med samma stora bokstäver.
  • Skriptet ligger i rätt objekt. Titta på etiketten ovanför kodrutan.
  • Öppna fönstret Output från menyn Window. Röd text visar skriptet och raden med felet.

Sitter du fortfarande fast? Skriv till oss →

6
Steg 6 / 8

Bygg tornet

  1. Lägg till en Part nära en sväng på vägen. Ställ in Size på 4, 8, 4, slå på Anchored och döp den till Tower.
  2. Lägg till ett Script i Tower och klistra in den här koden.
  3. Tryck på Play. Varje sekund träffar tornet den närmaste fienden inom räckhåll. Fienden blinkar vit, och efter 3 träffar försvinner den.
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

Vad varje del gör

  • Loopen mäter avståndet från tornet till varje fiende och kommer ihåg den som är närmast.
  • RANGE är hur långt tornet når. DAMAGE är hur mycket Health en träff tar bort.
  • När Health når 0 tar Destroy bort fienden.

Mer detaljer

  • Lägg tornet 8 till 12 studs från vägen. Räckvidden är 25 studs åt alla håll.
  • Ett torn behöver 3 sekunder för en fiende, och en ny fiende kommer var tredje sekund. Så ett torn kan bara hålla vägen om fienderna stannar inom räckvidd tillräckligt länge.
  • Det vita blixtljuset varar en tiondels sekund. Titta noga för att se det.
  • För ett andra torn markerar du Tower och trycker på Ctrl+D, och sedan flyttar du kopian. Skriptet följer med.
Tips. Ett torn fungerar bäst bredvid en sväng, eftersom fienderna då är kvar inom räckhåll längre.
Det här steget fungerar inte för mig

Kontrollera de här tre sakerna först

  • Namnet på varje del och varje skript är exakt som i guiden, med samma stora bokstäver.
  • Skriptet ligger i rätt objekt. Titta på etiketten ovanför kodrutan.
  • Öppna fönstret Output från menyn Window. Röd text visar skriptet och raden med felet.

Sitter du fortfarande fast? Skriv till oss →

7
Steg 7 / 8

Testa och balansera

  1. Tryck på F5 och titta på några vågor.
  2. Om ingen fiende någonsin når basen är spelet för lätt. Om basen snabbt förlorar all sin Health är det för svårt.
  3. Balansera med tre tal: väntetiden i Waves, fiendens Health och tornets DAMAGE.
  4. Tryck på Shift+F5 för att stoppa. Om något går fel öppnar du fönstret Output från menyn Window och läser den röda texten.

Mer detaljer

  • Ändra bara ett tal i taget och spela sedan igen. Annars vet du inte vilken ändring som hjälpte.
  • Väntetiden är talet i task.wait(3) nära slutet av skriptet Waves. Ett mindre tal skickar fienderna snabbare.
  • Fiendens Health finns i ServerStorage, i Enemy. Tornets DAMAGE står högst upp i skriptet Tower.
  • Ett bra första mål: basen ska klara sig två minuter med två torn.
Det här steget fungerar inte för mig

Kontrollera de här tre sakerna först

  • Namnet på varje del och varje skript är exakt som i guiden, med samma stora bokstäver.
  • Skriptet ligger i rätt objekt. Titta på etiketten ovanför kodrutan.
  • Öppna fönstret Output från menyn Window. Röd text visar skriptet och raden med felet.

Sitter du fortfarande fast? Skriv till oss →

8
Steg 8 / 8

Publicera det

  1. Välj File → Publish to Roblox. Ge spelet ett namn och en kort beskrivning.
  2. Öppna ditt spel på webbplatsen Creator Hub och fyll i frågeformuläret Maturity.
  3. Sätt spelet till Public och skicka länken till en kompis.

Mer detaljer

  • Första gången du publicerar frågar Studio efter ett namn och en beskrivning. Klicka på Create.
  • Creator Hub är webbplatsen create.roblox.com. Logga in med samma konto och klicka på ditt spel i listan.
  • Roblox kan be om mer innan ett spel kan bli offentligt, till exempel en ålderskontroll av kontot. Sidan berättar vad som saknas.
  • Om du är under 18 år gör du det här steget tillsammans med en förälder.
Tips. Visa spelet för en kompis och ställ en fråga: var det för lätt eller för svårt? Ändra sedan ett tal och testa igen.
Det här steget fungerar inte för mig

Kontrollera de här tre sakerna först

  • Namnet på varje del och varje skript är exakt som i guiden, med samma stora bokstäver.
  • Skriptet ligger i rätt objekt. Titta på etiketten ovanför kodrutan.
  • Öppna fönstret Output från menyn Window. Röd text visar skriptet och raden med felet.

Sitter du fortfarande fast? Skriv till oss →

Nu ändrar du själv

  • Lägg till ett andra torn med kort räckvidd och DAMAGE 2.
  • Låt vågorna gå snabbare med tiden. Ledtråd: spara väntetiden i en variabel och gör den lite mindre efter varje fiende.
  • Ge basen 20 i Health och låt varje fiende ta bort 2.