← Tüm rehberler
Rehber 4

İlk tower defense'ini yap

Düşmanlar üssüne doğru bir yol boyunca yürür ve bir kule en yakındakini vurur.

Ücretsiz60 dakika · Başlangıç · Roblox Studio
1
Adım 1 / 8

Yeri hazırla

  1. Roblox Studio'yu aç, New Experience'a tıkla ve Baseplate şablonunu seç.
  2. Explorer'da Workspace'in üstüne gel, + düğmesine tıkla ve bir Folder ekle. Adını Path koy.
  3. Workspace'e ikinci bir Folder ekle ve adını Enemies koy. Boş bırak. Düşmanlar oyun sırasında onun içinde görünecek.

Daha fazla ayrıntı

  • Baseplate şablonu, başlangıç ekranındaki şablon listesindedir.
  • + düğmesine tıkladığında Folder sözcüğünü yaz, hızlıca bulursun. Bir klasörü F2 ile yeniden adlandır.
  • Adlar tam olarak Path ve Enemies olmalı, ilk harfleri büyük. Script'ler bu adları arar.
  • Mac'te, bu rehber Ctrl dediğinde her seferinde Cmd tuşunu kullan.
Bu adım bende çalışmıyor

Önce şu üç şeyi kontrol et

  • Her parçanın ve script'in adı rehberdekiyle tam olarak aynı, büyük harfleriyle birlikte.
  • Script doğru nesnenin içinde duruyor. Kod kutusunun üstündeki etikete bak.
  • Window menüsünden Output penceresini aç. Kırmızı yazı, script'i ve sorunlu satırı gösterir.

Hâlâ takıldın mı? Bize yaz →

2
Adım 2 / 8

Yolu yap

  1. Bir Part ekle. Size değerini 6, 1, 6 yap, Anchored'ı aç ve Path klasörünün içine sürükle. Adını 1 koy.
  2. Ctrl+D ile kopyala ve kopyayı yaklaşık 30 studs uzağa taşı. Adını 2 koy.
  3. Adları 1, 2, 3, 4 ve 5 olan beş parçan olana kadar tekrarla. Rotada birkaç dönemeç olacak şekilde yerleştir.
  4. Düşmanlar 1'den 2'ye, 3'e ve böyle devam ederek gidecek. Her iki parça arasında düz bir çizgide ilerleyecekler.

Daha fazla ayrıntı

  • Bir parçayı klasöre koymak için Explorer'da adını Path adının üstüne sürükle.
  • Ctrl+D ile yapılan kopya zaten Path klasörünün içindedir. Yalnızca onu taşıman ve yeniden adlandırman gerekir.
  • Adlar sadece sayılardır: 1, 2, 3, 4, 5. Harf yok, boşluk yok.
  • Parçaları zeminde yatar halde bırak. Düşmanlar onların 2 studs üstünde süzülür.
Sık yapılan hata. Bir sayıyı atlamak. 3 numaralı parça yoksa düşmanlar 2 numaralı parçada durur ve script hata verir.
Bu adım bende çalışmıyor

Önce şu üç şeyi kontrol et

  • Her parçanın ve script'in adı rehberdekiyle tam olarak aynı, büyük harfleriyle birlikte.
  • Script doğru nesnenin içinde duruyor. Kod kutusunun üstündeki etikete bak.
  • Window menüsünden Output penceresini aç. Kırmızı yazı, script'i ve sorunlu satırı gösterir.

Hâlâ takıldın mı? Bize yaz →

3
Adım 3 / 8

Düşmanı oluştur

  1. Bir Part ekle. Shape değerini Ball, Size değerini 3, 3, 3 yap ve kırmızı yap. Anchored'ı aç, CanCollide'ı kapat ve adını Enemy koy.
  2. Enemy'nin üstüne gel, + düğmesine tıkla ve bir IntValue ekle. Adını Health koy ve Value değerini 3 yap.
  3. Enemy'yi ServerStorage'a sürükle. Artık bir şablon oldu. Oyun ondan kopyalar yapacak.

Daha fazla ayrıntı

  • Shape, Properties'te bir listedir. Ona tıkla ve Ball'u seç.
  • CanCollide, Properties'te bir onay kutusudur. İşaret yoksa oyuncular ve diğer parçalar düşmanın içinden geçer.
  • + düğmesine tıkladığında IntValue yazarak onu bul. Yeni IntValue'ye tıkla, sonra Properties'te Name'i Health, Value'yu 3 yap.
  • Enemy'yi ServerStorage'a sürükledikten sonra Viewport'ta görünmez olur. Bu doğru.
İpucu. Düşman Anchored'dır, çünkü onu bir script hareket ettirir. Anchored parçalar yerçekimini ve itilmeyi yok sayar.
Bu adım bende çalışmıyor

Önce şu üç şeyi kontrol et

  • Her parçanın ve script'in adı rehberdekiyle tam olarak aynı, büyük harfleriyle birlikte.
  • Script doğru nesnenin içinde duruyor. Kod kutusunun üstündeki etikete bak.
  • Window menüsünden Output penceresini aç. Kırmızı yazı, script'i ve sorunlu satırı gösterir.

Hâlâ takıldın mı? Bize yaz →

4
Adım 4 / 8

Üssü yap

  1. Yolun sonuna, 5 numaralı parçanın yanına büyük bir Part ekle. Anchored'ı aç ve adını Base koy.
  2. Base'in üstüne gel, + düğmesine tıkla ve bir IntValue ekle. Adını Health koy ve Value değerini 10 yap.
  3. Base'e Size {0, 200}, {0, 50} ve StudsOffset 0, 8, 0 olan bir BillboardGui ekle. İçine Size {1, 0}, {1, 0} olan ve TextScaled açık bir TextLabel ekle.
  4. Base'e bir Script ekle ve bu kodu yapıştır.
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()

Her parça ne yapar

  • Changed, Health değeri her değiştiğinde çalışır.
  • update fonksiyonu yeni sayıyı üssün üstündeki yazıya yazar.
  • Health 0 olunca yazı Game over gösterir ve Waves betiği düşman göndermeyi durdurur.

Daha fazla ayrıntı

  • 10, 10, 10 boyutu iyi bir başlangıçtır. Her renk olur.
  • Base'in Health değeri, düşmanın Health değerinden farklı bir nesnedir. Her biri kendi parçasının içinde durur.
  • Size ve StudsOffset için sayıları parantezler ve virgüllerle birlikte, gösterildiği gibi aynen yaz ve Enter'a bas.
  • Denemek için: F5'e bas. Base'in üstündeki etiket Base: 10 gösterir.
Bu adım bende çalışmıyor

Önce şu üç şeyi kontrol et

  • Her parçanın ve script'in adı rehberdekiyle tam olarak aynı, büyük harfleriyle birlikte.
  • Script doğru nesnenin içinde duruyor. Kod kutusunun üstündeki etikete bak.
  • Window menüsünden Output penceresini aç. Kırmızı yazı, script'i ve sorunlu satırı gösterir.

Hâlâ takıldın mı? Bize yaz →

5
Adım 5 / 8

Dalgaları gönder

  1. ServerScriptService'in üstüne gel, + düğmesine tıkla ve bir Script ekle. Adını Waves koy.
  2. Zaten yazılı olan satırı sil ve bu kodu yapıştır.
  3. Play'e bas. Her 3 saniyede bir, 1 numaralı parçada kırmızı bir top belirir ve yol boyunca ilerler. Sona ulaştığında üs 1 can kaybeder.
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

Her parça ne yapar

  • Clone, ServerStorage'daki Enemy şablonundan bir kopya yapar.
  • walk fonksiyonu düşmanı yol parçalarına sırayla götürür. distance / SPEED, uzun ve kısa mesafelerde hızı aynı tutar.
  • task.spawn her düşmanın kendi başına yürümesini sağlar, böylece döngü yenilerini göndermeye devam edebilir.

Daha fazla ayrıntı

  • Script yeni bir sekmede açılır. Kodun içine tıkla, her şeyi değiştirmek için önce Ctrl+A'ya, sonra Ctrl+V'ye bas.
  • Oyun çalışırken düşmanlar Enemies klasörünün içinde belirir. Onları Explorer'da izleyebilirsin.
  • Henüz kule yokken her düşman base'e ulaşır. 10 düşmandan sonra etiket Game over gösterir ve başka düşman gelmez.
  • Output'ta eksik bir ad hakkında kırmızı yazı çıkarsa, bir yol parçasının ya da bir klasörün adı yanlış demektir.
Bu adım bende çalışmıyor

Önce şu üç şeyi kontrol et

  • Her parçanın ve script'in adı rehberdekiyle tam olarak aynı, büyük harfleriyle birlikte.
  • Script doğru nesnenin içinde duruyor. Kod kutusunun üstündeki etikete bak.
  • Window menüsünden Output penceresini aç. Kırmızı yazı, script'i ve sorunlu satırı gösterir.

Hâlâ takıldın mı? Bize yaz →

6
Adım 6 / 8

Kuleyi yap

  1. Yolun bir dönemecinin yanına bir Part ekle. Size değerini 4, 8, 4 yap, Anchored'ı aç ve adını Tower koy.
  2. Tower'a bir Script ekle ve bu kodu yapıştır.
  3. Play'e bas. Kule saniyede bir kez menzildeki en yakın düşmana vurur. Düşman beyaz yanıp söner ve 3 vuruştan sonra kaybolur.
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

Her parça ne yapar

  • Döngü, kuleden her düşmana olan mesafeyi ölçer ve en yakın olanı aklında tutar.
  • RANGE, kulenin ne kadar uzağa erişebildiğidir. DAMAGE, bir vuruşun ne kadar can götürdüğüdür.
  • Health 0 olunca Destroy düşmanı siler.

Daha fazla ayrıntı

  • Kuleyi yoldan 8 ila 12 studs uzağa koy. Menzil her yönde 25 studs'tır.
  • Bir kule bir düşman için 3 saniye harcar ve her 3 saniyede yeni bir düşman gelir. Yani tek kule, düşmanlar yeterince uzun süre menzilde kalırsa yolu tutabilir.
  • Beyaz yanıp sönme saniyenin onda biri kadar sürer. Görmek için dikkatle bak.
  • İkinci bir kule için Tower'ı seç ve Ctrl+D'ye bas, sonra kopyayı taşı. Script de onunla birlikte gelir.
İpucu. Kule bir dönemecin yanında en iyi çalışır, çünkü düşmanlar orada menzilde daha uzun kalır.
Bu adım bende çalışmıyor

Önce şu üç şeyi kontrol et

  • Her parçanın ve script'in adı rehberdekiyle tam olarak aynı, büyük harfleriyle birlikte.
  • Script doğru nesnenin içinde duruyor. Kod kutusunun üstündeki etikete bak.
  • Window menüsünden Output penceresini aç. Kırmızı yazı, script'i ve sorunlu satırı gösterir.

Hâlâ takıldın mı? Bize yaz →

7
Adım 7 / 8

Test et ve dengele

  1. F5'e bas ve birkaç dalgayı izle.
  2. Hiçbir düşman üsse ulaşmıyorsa oyun çok kolaydır. Üs tüm canını hızla kaybediyorsa çok zordur.
  3. Üç sayıyla dengele: Waves içindeki bekleme süresi, düşmanın Health değeri ve kulenin DAMAGE değeri.
  4. Durdurmak için Shift+F5'e bas. Bir şey çalışmazsa Window menüsünden Output penceresini aç ve kırmızı yazıyı oku.

Daha fazla ayrıntı

  • Her seferinde yalnızca bir sayıyı değiştir, sonra yeniden oyna. Yoksa hangi değişikliğin işe yaradığını bilemezsin.
  • Bekleme süresi, Waves script'inin sonuna yakın task.wait(3) içindeki sayıdır. Daha küçük bir sayı düşmanları daha hızlı gönderir.
  • Düşmanın Health değeri ServerStorage'da, Enemy'nin içindedir. Kulenin DAMAGE değeri Tower script'inin en üstündedir.
  • İyi bir ilk hedef: base iki kuleyle iki dakika dayansın.
Bu adım bende çalışmıyor

Önce şu üç şeyi kontrol et

  • Her parçanın ve script'in adı rehberdekiyle tam olarak aynı, büyük harfleriyle birlikte.
  • Script doğru nesnenin içinde duruyor. Kod kutusunun üstündeki etikete bak.
  • Window menüsünden Output penceresini aç. Kırmızı yazı, script'i ve sorunlu satırı gösterir.

Hâlâ takıldın mı? Bize yaz →

8
Adım 8 / 8

Yayınla

  1. File → Publish to Roblox'u seç. Oyuna bir ad ve kısa bir açıklama ver.
  2. Creator Hub web sitesinde oyununu aç ve Maturity anketini doldur.
  3. Oyunu Public yap ve bağlantıyı bir arkadaşına gönder.

Daha fazla ayrıntı

  • İlk yayınlayışında Studio senden bir ad ve bir açıklama ister. Create'e tıkla.
  • Creator Hub, create.roblox.com web sitesidir. Aynı hesapla giriş yap ve listeden oyununa tıkla.
  • Roblox, bir oyun herkese açık olmadan önce daha fazlasını isteyebilir, örneğin hesapta yaş doğrulaması. Sayfa neyin eksik olduğunu söyler.
  • 18 yaşından küçükse bu adımı bir ebeveynle birlikte yap.
İpucu. Oyunu bir arkadaşına göster ve tek bir soru sor: çok kolay mıydı, çok zor muydu? Sonra bir sayıyı değiştir ve tekrar test et.
Bu adım bende çalışmıyor

Önce şu üç şeyi kontrol et

  • Her parçanın ve script'in adı rehberdekiyle tam olarak aynı, büyük harfleriyle birlikte.
  • Script doğru nesnenin içinde duruyor. Kod kutusunun üstündeki etikete bak.
  • Window menüsünden Output penceresini aç. Kırmızı yazı, script'i ve sorunlu satırı gösterir.

Hâlâ takıldın mı? Bize yaz →

Şimdi sen değiştir

  • Menzili kısa ve DAMAGE değeri 2 olan ikinci bir kule ekle.
  • Dalgaları zamanla hızlandır. İpucu: bekleme süresini bir değişkende tut ve her düşmandan sonra biraz küçült.
  • Üsse 20 can ver ve her düşmanın 2 can götürmesini sağla.