← Semua panduan
Panduan 4

Bina tower defense pertama kamu

Musuh berjalan di sepanjang laluan menuju pangkalan kamu, dan sebuah menara menembak yang paling hampir.

Percuma60 minit · Pemula · Roblox Studio
1
Langkah 1 / 8

Sediakan tempat

  1. Buka Roblox Studio, klik New Experience dan pilih templat Baseplate.
  2. Dalam Explorer letakkan tetikus di atas Workspace, klik + dan tambah Folder. Namakan Path.
  3. Tambah Folder kedua pada Workspace dan namakan Enemies. Biarkan kosong. Musuh akan muncul di dalamnya semasa permainan.

Butiran lanjut

  • Templat Baseplate ada dalam senarai templat pada skrin permulaan.
  • Apabila kamu klik +, taip perkataan Folder untuk mencarinya dengan cepat. Namakan semula folder dengan F2.
  • Namanya mesti tepat Path dan Enemies, dengan huruf pertama besar. Skrip mencari nama-nama ini.
  • Pada Mac, gunakan kekunci Cmd setiap kali panduan ini menyebut Ctrl.
Langkah ini tidak menjadi untuk saya

Semak tiga perkara ini dahulu

  • Nama setiap part dan skrip sama tepat seperti dalam panduan, termasuk huruf besarnya.
  • Skrip berada di dalam objek yang betul. Lihat label di atas kotak kod.
  • Buka tetingkap Output daripada menu Window. Teks merah menunjukkan skrip dan baris yang bermasalah.

Masih tersangkut? Tulis kepada kami →

2
Langkah 2 / 8

Bina laluan

  1. Tambah Part. Tetapkan Size kepada 6, 1, 6, hidupkan Anchored dan seret ke dalam folder Path. Namakan 1.
  2. Gandakannya dengan Ctrl+D dan alihkan salinan itu kira-kira 30 studs jauhnya. Namakan 2.
  3. Ulang sehingga kamu ada 5 part bernama 1, 2, 3, 4 dan 5. Letakkan supaya laluan itu ada beberapa selekoh.
  4. Musuh akan pergi dari 1 ke 2 ke 3 dan seterusnya, dalam garis lurus antara setiap pasangan.

Butiran lanjut

  • Untuk memasukkan part ke dalam folder, seret namanya dalam Explorer ke atas nama Path.
  • Salinan yang dibuat dengan Ctrl+D sudah berada di dalam folder Path. Kamu hanya perlu mengalihkan dan menamakannya semula.
  • Namanya hanyalah nombor: 1, 2, 3, 4, 5. Tiada huruf dan tiada ruang.
  • Biarkan bahagian itu terletak di atas lantai. Musuh terapung 2 studs di atasnya.
Kesilapan biasa. Melangkau satu nombor. Jika part 3 tiada, musuh berhenti di part 2 dan skrip menunjukkan ralat.
Langkah ini tidak menjadi untuk saya

Semak tiga perkara ini dahulu

  • Nama setiap part dan skrip sama tepat seperti dalam panduan, termasuk huruf besarnya.
  • Skrip berada di dalam objek yang betul. Lihat label di atas kotak kod.
  • Buka tetingkap Output daripada menu Window. Teks merah menunjukkan skrip dan baris yang bermasalah.

Masih tersangkut? Tulis kepada kami →

3
Langkah 3 / 8

Cipta musuh

  1. Tambah Part. Tetapkan Shape kepada Ball dan Size kepada 3, 3, 3, dan jadikan merah. Hidupkan Anchored, matikan CanCollide dan namakan Enemy.
  2. Letakkan tetikus di atas Enemy, klik + dan tambah IntValue. Namakan Health dan tetapkan Value kepada 3.
  3. Seret Enemy ke dalam ServerStorage. Kini ia ialah templat. Permainan akan membuat salinan daripadanya.

Butiran lanjut

  • Shape ialah senarai dalam Properties. Klik padanya dan pilih Ball.
  • CanCollide ialah kotak semak dalam Properties. Tanpa tanda semak, pemain dan part lain menembusi musuh.
  • Apabila kamu klik +, taip IntValue untuk mencarinya. Klik IntValue yang baharu, kemudian tukar Name kepada Health dan Value kepada 3 dalam Properties.
  • Selepas kamu menyeret Enemy ke dalam ServerStorage, ia hilang daripada Viewport. Itu betul.
Petua. Musuh dibuat Anchored kerana skrip yang menggerakkannya. Part yang Anchored tidak terkesan oleh graviti dan tolakan.
Langkah ini tidak menjadi untuk saya

Semak tiga perkara ini dahulu

  • Nama setiap part dan skrip sama tepat seperti dalam panduan, termasuk huruf besarnya.
  • Skrip berada di dalam objek yang betul. Lihat label di atas kotak kod.
  • Buka tetingkap Output daripada menu Window. Teks merah menunjukkan skrip dan baris yang bermasalah.

Masih tersangkut? Tulis kepada kami →

4
Langkah 4 / 8

Bina pangkalan

  1. Tambah Part besar di hujung laluan, bersebelahan part 5. Hidupkan Anchored dan namakan Base.
  2. Letakkan tetikus di atas Base, klik + dan tambah IntValue. Namakan Health dan tetapkan Value kepada 10.
  3. Tambah BillboardGui pada Base dengan Size {0, 200}, {0, 50} dan StudsOffset 0, 8, 0. Tambah TextLabel ke dalamnya dengan Size {1, 0}, {1, 0} dan TextScaled dihidupkan.
  4. Tambah Script pada Base dan tampal kod ini.
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()

Apa yang dilakukan oleh setiap bahagian

  • Changed berjalan setiap kali nilai Health berubah.
  • Fungsi update menulis nombor baharu pada label di atas pangkalan.
  • Apabila Health sampai 0, label menunjukkan Game over dan skrip Waves berhenti menghantar musuh.

Butiran lanjut

  • Saiz 10, 10, 10 ialah pangkalan yang sesuai. Mana-mana warna boleh.
  • Health pangkalan ialah objek yang berbeza daripada Health musuh. Setiap satu berada di dalam part masing-masing.
  • Untuk Size dan StudsOffset, taip nombor tepat seperti yang ditunjukkan, dengan kurungan dan koma, dan tekan Enter.
  • Untuk menguji: tekan F5. Label di atas pangkalan menunjukkan Base: 10.
Langkah ini tidak menjadi untuk saya

Semak tiga perkara ini dahulu

  • Nama setiap part dan skrip sama tepat seperti dalam panduan, termasuk huruf besarnya.
  • Skrip berada di dalam objek yang betul. Lihat label di atas kotak kod.
  • Buka tetingkap Output daripada menu Window. Teks merah menunjukkan skrip dan baris yang bermasalah.

Masih tersangkut? Tulis kepada kami →

5
Langkah 5 / 8

Hantar gelombang

  1. Letakkan tetikus di atas ServerScriptService, klik + dan tambah Script. Namakan Waves.
  2. Padam baris yang sudah ada dan tampal kod ini.
  3. Tekan Play. Setiap 3 saat sebiji bola merah muncul di part 1 dan bergerak di sepanjang laluan. Apabila ia sampai ke hujung, pangkalan kehilangan 1 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

Apa yang dilakukan oleh setiap bahagian

  • Clone membuat salinan templat Enemy daripada ServerStorage.
  • Fungsi walk menggerakkan musuh ke setiap part laluan mengikut urutan. distance / SPEED mengekalkan kelajuan yang sama pada bahagian panjang dan pendek.
  • task.spawn membolehkan setiap musuh berjalan sendiri, supaya gelung boleh terus menghantar yang baharu.

Butiran lanjut

  • Skrip dibuka dalam tab baharu. Klik di dalam kod, tekan Ctrl+A dan kemudian Ctrl+V untuk menggantikan semuanya.
  • Musuh muncul di dalam folder Enemies semasa permainan berjalan. Kamu boleh melihatnya dalam Explorer.
  • Tanpa menara lagi, setiap musuh sampai ke pangkalan. Selepas 10 musuh, label menunjukkan Game over dan tiada lagi musuh datang.
  • Teks merah dalam Output tentang nama yang tiada bermaksud sebahagian laluan atau sebuah folder mempunyai nama yang salah.
Langkah ini tidak menjadi untuk saya

Semak tiga perkara ini dahulu

  • Nama setiap part dan skrip sama tepat seperti dalam panduan, termasuk huruf besarnya.
  • Skrip berada di dalam objek yang betul. Lihat label di atas kotak kod.
  • Buka tetingkap Output daripada menu Window. Teks merah menunjukkan skrip dan baris yang bermasalah.

Masih tersangkut? Tulis kepada kami →

6
Langkah 6 / 8

Bina menara

  1. Tambah Part berhampiran selekoh pada laluan. Tetapkan Size kepada 4, 8, 4, hidupkan Anchored dan namakan Tower.
  2. Tambah Script pada Tower dan tampal kod ini.
  3. Tekan Play. Sekali sesaat menara memukul musuh yang paling hampir dalam jarak capaian. Musuh berkelip putih, dan selepas 3 pukulan ia hilang.
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

Apa yang dilakukan oleh setiap bahagian

  • Gelung itu mengukur jarak dari menara ke setiap musuh dan mengingati yang paling hampir.
  • RANGE ialah sejauh mana menara boleh mencapai. DAMAGE ialah berapa banyak health yang dikurangkan oleh satu pukulan.
  • Apabila Health sampai 0, Destroy membuang musuh itu.

Butiran lanjut

  • Letakkan menara 8 hingga 12 studs dari laluan. Jaraknya 25 studs ke semua arah.
  • Satu menara mengambil masa 3 saat untuk seorang musuh, dan musuh baharu datang setiap 3 saat. Jadi satu menara hanya dapat menahan laluan jika musuh kekal dalam jarak cukup lama.
  • Kilat putih itu hanya bertahan sepersepuluh saat. Perhatikan dengan teliti untuk melihatnya.
  • Untuk menara kedua, pilih Tower dan tekan Ctrl+D, kemudian alihkan salinannya. Skrip ikut serta.
Petua. Menara paling berkesan di sebelah selekoh, kerana musuh kekal dalam jarak capaian lebih lama di situ.
Langkah ini tidak menjadi untuk saya

Semak tiga perkara ini dahulu

  • Nama setiap part dan skrip sama tepat seperti dalam panduan, termasuk huruf besarnya.
  • Skrip berada di dalam objek yang betul. Lihat label di atas kotak kod.
  • Buka tetingkap Output daripada menu Window. Teks merah menunjukkan skrip dan baris yang bermasalah.

Masih tersangkut? Tulis kepada kami →

7
Langkah 7 / 8

Uji dan seimbangkan

  1. Tekan F5 dan perhatikan beberapa gelombang.
  2. Jika tiada musuh yang sampai ke pangkalan, permainan terlalu mudah. Jika pangkalan kehilangan semua health dengan cepat, ia terlalu sukar.
  3. Seimbangkannya dengan tiga nombor: masa menunggu dalam Waves, nilai Health musuh dan DAMAGE menara.
  4. Tekan Shift+F5 untuk berhenti. Jika sesuatu gagal, buka tetingkap Output dari menu Window dan baca teks merah.

Butiran lanjut

  • Ubah satu nombor sahaja pada satu masa, kemudian main semula. Jika tidak, kamu tidak tahu perubahan mana yang membantu.
  • Masa menunggu ialah nombor dalam task.wait(3) berhampiran penghujung skrip Waves. Nombor yang lebih kecil menghantar musuh lebih cepat.
  • Health musuh berada dalam ServerStorage, di dalam Enemy. DAMAGE menara berada di bahagian atas skrip Tower.
  • Sasaran pertama yang baik: pangkalan bertahan dua minit dengan dua menara.
Langkah ini tidak menjadi untuk saya

Semak tiga perkara ini dahulu

  • Nama setiap part dan skrip sama tepat seperti dalam panduan, termasuk huruf besarnya.
  • Skrip berada di dalam objek yang betul. Lihat label di atas kotak kod.
  • Buka tetingkap Output daripada menu Window. Teks merah menunjukkan skrip dan baris yang bermasalah.

Masih tersangkut? Tulis kepada kami →

8
Langkah 8 / 8

Terbitkan

  1. Pilih File → Publish to Roblox. Beri permainan itu nama dan penerangan ringkas.
  2. Di laman web Creator Hub buka permainan kamu dan isi soal selidik Maturity.
  3. Tetapkan permainan kepada Public dan hantar pautannya kepada seorang kawan.

Butiran lanjut

  • Kali pertama kamu menerbitkan, Studio meminta nama dan penerangan. Klik Create.
  • Creator Hub ialah laman web create.roblox.com. Log masuk dengan akaun yang sama dan klik permainan kamu dalam senarai.
  • Roblox mungkin meminta lebih sebelum sesuatu permainan boleh dijadikan awam, contohnya semakan umur pada akaun. Halaman itu memberitahu apa yang kurang.
  • Jika kamu berumur bawah 18 tahun, buat langkah ini bersama ibu atau bapa.
Petua. Tunjukkan permainan kepada seorang kawan dan tanya satu soalan: terlalu mudah atau terlalu sukar? Kemudian ubah satu nombor dan uji sekali lagi.
Langkah ini tidak menjadi untuk saya

Semak tiga perkara ini dahulu

  • Nama setiap part dan skrip sama tepat seperti dalam panduan, termasuk huruf besarnya.
  • Skrip berada di dalam objek yang betul. Lihat label di atas kotak kod.
  • Buka tetingkap Output daripada menu Window. Teks merah menunjukkan skrip dan baris yang bermasalah.

Masih tersangkut? Tulis kepada kami →

Sekarang ubah sendiri

  • Tambah menara kedua dengan jarak capaian pendek dan DAMAGE 2.
  • Jadikan gelombang lebih laju dari masa ke semasa. Petunjuk: simpan masa menunggu dalam pemboleh ubah dan kecilkan sedikit selepas setiap musuh.
  • Beri pangkalan 20 health dan jadikan setiap musuh mengurangkan 2.