← Tüm rehberler
Rehber 5

İlk steal-and-defend oyununu yap

Her oyuncunun bir üssü var. Ortadaki gem'i kap, puan almak için eve koştur ve onu taşıyan herkesi yakala.

Ücretsiz70 dakika · Başlangıç, son rehber · 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. Gem haritanın ortasında duracak. Dört üs onun çevresinde, her biri ortadan yaklaşık 60 studs uzakta duracak.
  3. Bu oyun için en az iki oyuncu gerekir, bu yüzden sonunda iki test oyuncusuyla deneyeceksin.

Daha fazla ayrıntı

  • Baseplate şablonu, başlangıç ekranındaki şablon listesindedir.
  • Properties'teki Position alanı bir parçanın nerede olduğunu gösterir. 60, 0.5, 0 konumu, haritanın ortasından 60 studs uzaktır.
  • SpawnLocation'ı, yani oyuncuların belirdiği platformu, ortaya yakın bir yere taşı, böylece her oyuncu mücevhere aynı uzaklıktan başlar.
  • 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

Üsleri yap

  1. Explorer'da Workspace'in üstüne gel, + düğmesine tıkla ve bir Folder ekle. Adını Bases koy.
  2. Bir Part ekle. Size değerini 16, 1, 16 yap, Anchored'ı aç ve gri yap. Onu Bases'in içine sürükle ve adını Base1 koy.
  3. Ctrl+D ile üç kez kopyala. Kopyaların adını Base2, Base3 ve Base4 yap ve haritanın her tarafına bir tane taşı.

Daha fazla ayrıntı

  • Parçayı klasörün içine koymak için Explorer'da adını Bases adının üstüne sürükle.
  • Ctrl+D ile yapılan kopyalar zaten Bases klasörünün içindedir. Her birini F2 ile yeniden adlandır.
  • Adlar tam olarak Base1, Base2, Base3 ve Base4 olmalı, sayıdan önce boşluk olmadan.
  • Dörtten fazla oyuncusu olan bir sunucuda base sayısından fazla oyuncu olur. Sonra Creator Hub'daki oyun ayarlarından sunucu boyutunu 4 yapabilirsin.
İpucu. Dört üssü de ortadan aynı uzaklıkta tut. Böylece oyun herkes için adil olur.
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

Gem'i oluştur

  1. Haritanın ortasına, zeminden yaklaşık 4 studs yukarıya bir Part ekle. Size değerini 2, 2, 2 yap, parlak bir renk seç ve Material'i Neon yap. Adını Gem koy.
  2. Anchored ve Massless'ı aç, CanCollide'ı kapat.
  3. Gem'in üstüne gel, + düğmesine tıkla ve bir ProximityPrompt ekle. ActionText değerini Take, HoldDuration değerini 1 yap.

Her parça ne yapar

  • ProximityPrompt, bir oyuncu yakında durunca bir düğme gösterir. Onu 1 saniye basılı tutmak tetikler.
  • Massless açık ve CanCollide kapalı olması, gem'in onu taşıyan oyuncuyu yavaşlatmasını veya itmesini engeller.

Daha fazla ayrıntı

  • Anchored, Massless ve CanCollide, Properties'te onay kutularıdır.
  • + düğmesine tıkladığında ProximityPrompt yazarak onu bul. Ona tıkla, sonra Properties'te ActionText ve HoldDuration değerlerini değiştir.
  • Oyunda gem'in yakınında durunca E harfi ve Take sözcüğü olan küçük bir düğme belirir.
  • Telefonda oyuncular parmaklarını o düğmenin üstünde basılı tutar.
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

Her oyuncuya bir üs ve bir skor ver

  1. ServerScriptService'in üstüne gel, + düğmesine tıkla ve bir Script ekle. Adını Game koy.
  2. Zaten yazılı olan satırı sil ve bu kodu yapıştır. Bu, üç parçanın ilkidir.
  3. Play'e bas. Bir üs yeşile döner. O senin üssün.
ServerScriptService > Game (1 / 3)
local Players = game:GetService("Players")

local bases = workspace:WaitForChild("Bases")
local gem = workspace:WaitForChild("Gem")
local home = gem.CFrame
local carrier = nil

Players.PlayerAdded:Connect(function(player)
	local stats = Instance.new("Folder")
	stats.Name = "leaderstats"
	stats.Parent = player

	local score = Instance.new("IntValue")
	score.Name = "Score"
	score.Parent = stats

	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == nil then
			base:SetAttribute("Owner", player.UserId)
			base.Color = Color3.fromRGB(60, 220, 120)
			break
		end
	end
end)

Players.PlayerRemoving:Connect(function(player)
	for _, base in ipairs(bases:GetChildren()) do
		if base:GetAttribute("Owner") == player.UserId then
			base:SetAttribute("Owner", nil)
			base.Color = Color3.fromRGB(160, 160, 160)
		end
	end
end)

Her parça ne yapar

  • İlk satırlar üsleri ve gem'i bulur ve gem'in başladığı yeri aklında tutar.
  • SetAttribute, sahibinin UserId değerini ilk boş üssün üzerine yazar.
  • PlayerRemoving, sahibi çıkınca üssü tekrar boşa çıkarır.

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.
  • Hangi base'in yeşile döndüğü, base'lerin klasördeki sırasına bağlıdır. Seninkini bulmak için etrafta dolaş.
  • Sağ üst köşedeki oyuncu listesi Score 0 gösterir.
  • Gem'e yürüyüp E'ye bassan da şimdilik hiçbir şey olmaz. O bir sonraki adımda gelir.
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

Oyuncuların gem'i almasını sağla

  1. Game script'ini tekrar aç.
  2. Bu kodu önceki adımdaki kodun altına yapıştır.
  3. Play'e bas, gem'e yürü ve E'ye basılı tut. Gem başının üstüne atlar ve seni takip eder.
ServerScriptService > Game (2 / 3)
local function resetGem()
	carrier = nil

	local weld = gem:FindFirstChild("CarryWeld")
	if weld then
		weld:Destroy()
	end

	gem.Anchored = true
	gem.CFrame = home
	gem.ProximityPrompt.Enabled = true
end

gem.ProximityPrompt.Triggered:Connect(function(player)
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if carrier or not root then return end

	carrier = player
	gem.ProximityPrompt.Enabled = false
	gem.Anchored = false
	gem.CFrame = root.CFrame * CFrame.new(0, 4, 0)

	local weld = Instance.new("WeldConstraint")
	weld.Name = "CarryWeld"
	weld.Part0 = root
	weld.Part1 = gem
	weld.Parent = gem
end)

Her parça ne yapar

  • carrier, gem'i kimin tuttuğunu aklında tutar. Gem taşınırken başka kimse onu alamaz.
  • WeldConstraint gem'i oyuncuya yapıştırır, böylece onunla birlikte hareket eder.
  • resetGem kaynağı kaldırır ve gem'i tekrar ortaya koyar.

Daha fazla ayrıntı

  • Script'i yeniden açmak için Explorer'da Game'e çift tıkla.
  • Kodun en son karakterinin arkasına tıkla ve Enter'a iki kez bas. Sonra Ctrl+V'ye bas. Bu sefer Ctrl+A'ya basma, yoksa ilk bölümü değiştirirsin.
  • Gem'i taşırken başının 4 studs üstünde süzülür.
  • Denemek için: gem'i al, sonra onu taşıdığın sürece Take düğmesinin kaybolduğunu kontrol 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 →

6
Adım 6 / 8

Puanlama ve yakalama ekle

  1. Bu son parçayı Game script'inin en sonuna yapıştır.
  2. Play'e bas, gem'i al ve yeşil üssüne koş. Score 1 artar ve gem ortaya geri döner.
ServerScriptService > Game (3 / 3)
for _, base in ipairs(bases:GetChildren()) do
	base.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player and player == carrier and base:GetAttribute("Owner") == player.UserId then
			player.leaderstats.Score.Value += 1
			resetGem()
		end
	end)
end

while true do
	task.wait(0.2)

	if carrier then
		local weld = gem:FindFirstChild("CarryWeld")
		local root = weld and weld.Part0
		local character = root and root.Parent
		local humanoid = character and character:FindFirstChildOfClass("Humanoid")

		if not humanoid or humanoid.Health <= 0 or root.Position.Y < -20 then
			resetGem()
		else
			for _, other in ipairs(Players:GetPlayers()) do
				local otherRoot = other ~= carrier and other.Character and other.Character:FindFirstChild("HumanoidRootPart")
				if otherRoot and (otherRoot.Position - root.Position).Magnitude < 5 then
					resetGem()
					break
				end
			end
		end
	end
end

Her parça ne yapar

  • Her üs üç şeyi kontrol eder: bir oyuncu dokundu mu, o oyuncu gem'i taşıyor mu ve üs ona ait mi.
  • En alttaki döngü saniyede 5 kez çalışır. Başka bir oyuncu taşıyıcıya 5 studs'tan daha fazla yaklaşırsa gem geri gider.
  • Taşıyıcı oyundan çıkarsa veya haritadan düşerse döngü gem'i de sıfırlar.

Daha fazla ayrıntı

  • Yine script'in en son karakterinin arkasına tıkla, Enter'a iki kez bas ve yapıştır.
  • Bitmiş script'in üç bölümü şu sırayla durur: base'ler ve skor, gem'i alma, puan alma ve dokunarak yakalama.
  • Kimseye ait olmayan gri bir base puan vermez. Yalnızca kendi yeşil base'in sayılır.
  • Tek başına dokunarak yakalamayı deneyemezsin. Bunu bir sonraki adımda iki oyuncuyla yaparsın.
Sık yapılan hata. Bu parçayı script'in ortasına yapıştırmak. while döngüsü hiç bitmez, bu yüzden altındaki hiçbir kod çalışmaz.
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

İki oyuncuyla test et

  1. Play düğmesinin yanındaki küçük menüyü aç ve Server & Clients'ı seç. Oyuncu sayısını 2 yap ve Play'e bas.
  2. Studio iki oyun penceresi açar. Her biri farklı üssü olan farklı bir oyuncudur.
  3. Bir pencerede gem'i al. Diğer pencerede o oyuncuya koş. Gem ortaya geri döner.
  4. Testi ana Studio penceresindeki kırmızı Stop düğmesiyle durdur, sonra menüyü tekrar Test'e çevir.

Daha fazla ayrıntı

  • Küçük menü, Studio'nun en üstünde Play düğmesinin hemen yanındaki oktur.
  • İki oyun penceresi üst üste açılır. Her ikisini de görebilmek için birini yana sürükle.
  • Klavyeyi kullanmadan önce bir pencerenin içine tıkla. Tuşlar en son tıkladığın pencereye gider.
  • İki pencereyle denemek için yeterli belleği olan bir bilgisayar gerekir. Çok yavaşsa önce diğer programları kapat.
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. Bu oyun sadece diğer oyuncularla eğlencelidir. İlk maç için iki üç arkadaşını aynı sunucuya davet 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

  • Bir oyuncu 5 puana ulaşınca turu bitir ve her skoru tekrar 0 yap.
  • Farklı renkte ikinci bir gem ekle.
  • Taşıyıcıyı yavaşlat. İpucu: gem alınınca Humanoid.WalkSpeed değerini 12 yap ve resetGem içinde tekrar 16 yap.