← Semua panduan
Panduan 4

Buat tower defense pertamamu

Musuh berjalan di sepanjang jalur menuju markasmu, dan sebuah tower menembak musuh yang paling dekat.

Gratis60 menit · Pemula · Roblox Studio
1
Langkah 1 / 8

Siapkan place-nya

  1. Buka Roblox Studio, klik New Experience dan pilih template Baseplate.
  2. Di Explorer, arahkan mouse ke Workspace, klik + dan tambahkan Folder. Beri nama Path.
  3. Tambahkan Folder kedua ke Workspace dan beri nama Enemies. Biarkan kosong. Musuh akan muncul di dalamnya selama game berjalan.

Detail lengkap

  • Template Baseplate ada di daftar template di layar awal.
  • Saat kamu mengklik +, ketik kata Folder untuk menemukannya dengan cepat. Ganti nama folder dengan F2.
  • Namanya harus persis Path dan Enemies, dengan huruf pertama kapital. Script mencari nama-nama ini.
  • Di Mac, pakai tombol Cmd setiap kali panduan ini menyebut Ctrl.
Langkah ini tidak berhasil di tempatku

Periksa tiga hal ini dulu

  • Nama setiap part dan script sama persis dengan di panduan, termasuk huruf besarnya.
  • Script ada di dalam objek yang benar. Lihat label di atas kotak kode.
  • Buka jendela Output dari menu Window. Teks merah menunjukkan script dan baris yang bermasalah.

Masih macet? Tulis ke kami →

2
Langkah 2 / 8

Buat jalurnya

  1. Tambahkan Part. Atur Size ke 6, 1, 6, nyalakan Anchored, lalu tarik ke Folder Path. Beri nama 1.
  2. Gandakan dengan Ctrl+D dan pindahkan salinannya sekitar 30 studs menjauh. Beri nama 2.
  3. Ulangi sampai kamu punya 5 Part bernama 1, 2, 3, 4, dan 5. Letakkan supaya rutenya punya beberapa tikungan.
  4. Musuh akan berjalan dari 1 ke 2 ke 3 dan seterusnya, dalam garis lurus di antara setiap pasangan.

Detail lengkap

  • Untuk memasukkan part ke dalam folder, tarik namanya di Explorer ke atas nama Path.
  • Salinan yang dibuat dengan Ctrl+D sudah berada di dalam folder Path. Kamu hanya perlu memindahkan dan mengganti namanya.
  • Namanya hanya angka: 1, 2, 3, 4, 5. Tanpa huruf dan tanpa spasi.
  • Biarkan bagian-bagian itu tergeletak di lantai. Musuh melayang 2 studs di atasnya.
Kesalahan umum. Melewatkan satu angka. Kalau Part 3 hilang, musuh berhenti di Part 2 dan script menampilkan error.
Langkah ini tidak berhasil di tempatku

Periksa tiga hal ini dulu

  • Nama setiap part dan script sama persis dengan di panduan, termasuk huruf besarnya.
  • Script ada di dalam objek yang benar. Lihat label di atas kotak kode.
  • Buka jendela Output dari menu Window. Teks merah menunjukkan script dan baris yang bermasalah.

Masih macet? Tulis ke kami →

3
Langkah 3 / 8

Buat musuhnya

  1. Tambahkan Part. Atur Shape ke Ball dan Size ke 3, 3, 3, lalu buat berwarna merah. Nyalakan Anchored, matikan CanCollide, dan beri nama Enemy.
  2. Arahkan mouse ke Enemy, klik + dan tambahkan IntValue. Beri nama Health dan atur Value-nya ke 3.
  3. Tarik Enemy ke ServerStorage. Sekarang ia menjadi cetakan. Game akan membuat salinan darinya.

Detail lengkap

  • Shape adalah daftar di Properties. Klik daftar itu dan pilih Ball.
  • CanCollide adalah kotak centang di Properties. Tanpa tanda centang, pemain dan part lain menembus musuh.
  • Saat kamu mengklik +, ketik IntValue untuk menemukannya. Klik IntValue yang baru, lalu ubah Name menjadi Health dan Value menjadi 3 di Properties.
  • Setelah kamu menarik Enemy ke ServerStorage, ia hilang dari Viewport. Itu benar.
Tips. Enemy memakai Anchored karena sebuah script yang menggerakkannya. Part yang Anchored tidak terpengaruh gravitasi dan dorongan.
Langkah ini tidak berhasil di tempatku

Periksa tiga hal ini dulu

  • Nama setiap part dan script sama persis dengan di panduan, termasuk huruf besarnya.
  • Script ada di dalam objek yang benar. Lihat label di atas kotak kode.
  • Buka jendela Output dari menu Window. Teks merah menunjukkan script dan baris yang bermasalah.

Masih macet? Tulis ke kami →

4
Langkah 4 / 8

Bangun markasnya

  1. Tambahkan Part besar di ujung jalur, di sebelah Part 5. Nyalakan Anchored dan beri nama Base.
  2. Arahkan mouse ke Base, klik + dan tambahkan IntValue. Beri nama Health dan atur Value-nya ke 10.
  3. Tambahkan BillboardGui ke Base dengan Size {0, 200}, {0, 50} dan StudsOffset 0, 8, 0. Tambahkan TextLabel ke dalamnya dengan Size {1, 0}, {1, 0} dan TextScaled menyala.
  4. Tambahkan Script ke Base lalu tempel kode 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()

Fungsi tiap bagian

  • Changed berjalan setiap kali nilai Health berubah.
  • Fungsi update menulis angka yang baru ke label di atas markas.
  • Saat Health mencapai 0, label menampilkan Game over dan skrip Waves berhenti mengirim musuh.

Detail lengkap

  • Size 10, 10, 10 cocok untuk markas. Warna apa pun boleh.
  • Health milik markas adalah objek yang berbeda dari Health milik musuh. Masing-masing berada di dalam part-nya sendiri.
  • Untuk Size dan StudsOffset, ketik angkanya persis seperti yang ditunjukkan, lengkap dengan tanda kurung dan koma, lalu tekan Enter.
  • Untuk mencoba: tekan F5. Label di atas markas menunjukkan Base: 10.
Langkah ini tidak berhasil di tempatku

Periksa tiga hal ini dulu

  • Nama setiap part dan script sama persis dengan di panduan, termasuk huruf besarnya.
  • Script ada di dalam objek yang benar. Lihat label di atas kotak kode.
  • Buka jendela Output dari menu Window. Teks merah menunjukkan script dan baris yang bermasalah.

Masih macet? Tulis ke kami →

5
Langkah 5 / 8

Kirim gelombang musuh

  1. Arahkan mouse ke ServerScriptService, klik + dan tambahkan Script. Beri nama Waves.
  2. Hapus baris yang sudah ada di dalamnya lalu tempel kode ini.
  3. Tekan Play. Setiap 3 detik sebuah bola merah muncul di Part 1 dan bergerak di sepanjang jalur. Saat sampai di ujung, markas 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

Fungsi tiap bagian

  • Clone membuat salinan cetakan Enemy dari ServerStorage.
  • Fungsi walk menggerakkan musuh ke setiap Part jalur secara berurutan. distance / SPEED menjaga kecepatan tetap sama di bagian yang panjang maupun pendek.
  • task.spawn membuat setiap musuh berjalan sendiri-sendiri, jadi perulangan bisa terus mengirim musuh baru.

Detail lengkap

  • Script terbuka di tab baru. Klik di dalam kode, tekan Ctrl+A lalu Ctrl+V untuk mengganti semuanya.
  • Musuh muncul di dalam folder Enemies selama game berjalan. Kamu bisa melihatnya di Explorer.
  • Tanpa menara, setiap musuh sampai ke markas. Setelah 10 musuh, label menunjukkan Game over dan tidak ada musuh lagi yang datang.
  • Teks merah di Output tentang nama yang hilang berarti ada bagian jalur atau folder yang namanya salah.
Langkah ini tidak berhasil di tempatku

Periksa tiga hal ini dulu

  • Nama setiap part dan script sama persis dengan di panduan, termasuk huruf besarnya.
  • Script ada di dalam objek yang benar. Lihat label di atas kotak kode.
  • Buka jendela Output dari menu Window. Teks merah menunjukkan script dan baris yang bermasalah.

Masih macet? Tulis ke kami →

6
Langkah 6 / 8

Bangun tower

  1. Tambahkan Part di dekat tikungan jalur. Atur Size ke 4, 8, 4, nyalakan Anchored, dan beri nama Tower.
  2. Tambahkan Script ke Tower lalu tempel kode ini.
  3. Tekan Play. Sekali per detik tower memukul musuh terdekat dalam jangkauan. Musuh berkedip putih, dan setelah 3 pukulan ia menghilang.
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

Fungsi tiap bagian

  • Perulangan mengukur jarak dari tower ke setiap musuh dan mengingat yang paling dekat.
  • RANGE adalah seberapa jauh tower bisa menjangkau. DAMAGE adalah seberapa banyak health yang berkurang dari satu pukulan.
  • Saat Health mencapai 0, Destroy menghapus musuh.

Detail lengkap

  • Taruh menara 8 sampai 12 studs dari jalur. Jangkauannya 25 studs ke segala arah.
  • Satu menara butuh 3 detik untuk satu musuh, dan musuh baru datang setiap 3 detik. Jadi satu menara hanya bisa menahan jalur kalau musuh berada dalam jangkauan cukup lama.
  • Kilatan putihnya hanya berlangsung sepersepuluh detik. Perhatikan baik-baik supaya terlihat.
  • Untuk menara kedua, pilih Tower dan tekan Ctrl+D, lalu pindahkan salinannya. Script-nya ikut terbawa.
Tips. Tower paling efektif di dekat tikungan, karena di sana musuh berada lebih lama dalam jangkauan.
Langkah ini tidak berhasil di tempatku

Periksa tiga hal ini dulu

  • Nama setiap part dan script sama persis dengan di panduan, termasuk huruf besarnya.
  • Script ada di dalam objek yang benar. Lihat label di atas kotak kode.
  • Buka jendela Output dari menu Window. Teks merah menunjukkan script dan baris yang bermasalah.

Masih macet? Tulis ke kami →

7
Langkah 7 / 8

Tes dan seimbangkan

  1. Tekan F5 dan tonton beberapa gelombang.
  2. Kalau tidak ada musuh yang sampai ke markas, game-nya terlalu mudah. Kalau markas kehilangan semua health dengan cepat, game-nya terlalu sulit.
  3. Seimbangkan dengan tiga angka: waktu tunggu di Waves, nilai Health musuh, dan DAMAGE tower.
  4. Tekan Shift+F5 untuk berhenti. Kalau ada yang gagal, buka jendela Output dari menu Window dan baca tulisan merahnya.

Detail lengkap

  • Ubah satu angka saja setiap kali, lalu main lagi. Kalau tidak, kamu tidak tahu perubahan mana yang membantu.
  • Waktu tunggu adalah angka di task.wait(3) dekat akhir script Waves. Angka yang lebih kecil mengirim musuh lebih cepat.
  • Health musuh ada di ServerStorage, di dalam Enemy. DAMAGE menara ada di bagian atas script Tower.
  • Target pertama yang bagus: markas bertahan dua menit dengan dua menara.
Langkah ini tidak berhasil di tempatku

Periksa tiga hal ini dulu

  • Nama setiap part dan script sama persis dengan di panduan, termasuk huruf besarnya.
  • Script ada di dalam objek yang benar. Lihat label di atas kotak kode.
  • Buka jendela Output dari menu Window. Teks merah menunjukkan script dan baris yang bermasalah.

Masih macet? Tulis ke kami →

8
Langkah 8 / 8

Publikasikan

  1. Pilih File → Publish to Roblox. Beri game-mu nama dan deskripsi singkat.
  2. Di situs Creator Hub, buka game-mu lalu isi kuesioner Maturity.
  3. Atur game ke Public lalu kirim tautannya ke temanmu.

Detail lengkap

  • Saat pertama kali mempublikasikan, Studio meminta nama dan deskripsi. Klik Create.
  • Creator Hub adalah situs create.roblox.com. Masuk dengan akun yang sama lalu klik gamemu di daftar.
  • Roblox mungkin meminta hal lain sebelum game bisa dibuat publik, misalnya pemeriksaan usia pada akun. Halamannya akan memberi tahu apa yang kurang.
  • Kalau umurmu di bawah 18 tahun, kerjakan langkah ini bersama orang tua.
Tips. Tunjukkan game-mu ke temanmu dan tanyakan satu hal: terlalu mudah atau terlalu sulit? Lalu ubah satu angka dan tes lagi.
Langkah ini tidak berhasil di tempatku

Periksa tiga hal ini dulu

  • Nama setiap part dan script sama persis dengan di panduan, termasuk huruf besarnya.
  • Script ada di dalam objek yang benar. Lihat label di atas kotak kode.
  • Buka jendela Output dari menu Window. Teks merah menunjukkan script dan baris yang bermasalah.

Masih macet? Tulis ke kami →

Sekarang ubah sendiri

  • Tambahkan tower kedua dengan jangkauan pendek dan DAMAGE 2.
  • Buat gelombang makin cepat seiring waktu. Petunjuk: simpan waktu tunggu di sebuah variabel dan kecilkan sedikit setelah setiap musuh.
  • Beri markas 20 health dan buat setiap musuh mengurangi 2.