Bir madeni para koleksiyonu mekaniği oluşturun

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.


Artık 3D bir dünyaya sahip olduğunuza göre, ilk scriptinizi ekleme zamanı. Bu bölümde, oyuncuların madeni paraları toplamasına olanak tanıyan ve toplandıktan sonra madeni paraları geçici olarak devre dışı bırakan bir madeni para koleksiyonu mekaniği oluşturacaksınız.

Madeni paraları oluşturun

Herhangi bir şey scriptlemek için, dünyada madeni paralar olarak kullanmak üzere yer tutucu nesnelere sahip olmanız gerekir. Önceki bölümde yaptığınız deniz yığını platformları gibi, madeni paralar basit Part nesneleri olabilir.

Madeni paraları oluşturun
Workspace > World içinde, Coins adında yeni bir klasör oluşturun.
Coins klasörünün içinde, BrickColor'u Gold, Material'ı Metal, Boyutu 0.6, 8, 4 ve Yönlendirmesi 90, 0, 0 olan Coin adında bir silindirik Parça oluşturun.
CanCollide'ı devre dışı bırakın ve Anchored'ı etkinleştirin.
Sonra Coin parçasını birkaç kez kopyalayın ve kopyaları adanın etrafına ve platformların üzerine serpiştirin, böylece deniz yığını seviyelerinden ulaşılabilir olsun.
Her bir kopyanın adını Coin olarak tutun.

Scripti oluşturun

Sonraki adımda, madeni paraların oyunculara yanıt vermesini sağlayacaksınız. Roblox motoru, bir şeyin bir madeni paraya dokunduğunu algılayabilir, ancak madeni paranın nasıl tepki vermesi gerektiğini tanımlamak için bir script kullanmanız gerekir.

CoinService Oluştur
ServerScriptService içinde, aşağıdaki kod ile CoinService adında bir Script oluşturun:
```lua
-- Servisleri ve değişkenleri başlatma
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
-- Olay işleyicisini tanımlama
local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Oyuncu bir madeni paraya dokundu
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Oyuncu madeni parayı topladı")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
-- Olay dinleyicilerini ayarlama
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end
```

Artık bir oyuncu bir madeni paraya dokunduğunda, madeni para 10 saniye boyunca kaybolur ve çıktı günlüğü Oyuncu madeni parayı topladı mesajını yazdırır.

Aşağıdaki bölümler, scriptin nasıl çalıştığını daha ayrıntılı olarak açıklar.

Servisleri ve değişkenleri başlatma

Diğer dillerde yazdığınız kodların çoğunda olduğu gibi, daha sonra ihtiyaç duyacağınız değişkenleri scriptin en üstünde tanımlarsınız. Kodumuz aşağıdakileri yapar:

  • Servis örneklerini elde etme - Roblox servisleri, yaygın özellikler için yerleşik işlevsellik sağlar. Script ilk olarak, 3D dünyadaki her nesneyi içeren Workspace servisinin örneğini ve oyununuzla bağlantılı tüm oyuncuları yöneten Player servisinin örneğini alır.
  • Tüm madeni paralara referans elde etme - Script daha sonra GetChildren() yöntemi ile madeni para nesnelerine ait tüm referansları 3D çalışma alanında sorgular. Bu yöntem, ilişkilendirildiği nesneye ait her şeyi içeren bir dizi döndürür; bu durumda, daha önce oluşturduğunuz Workspace.World.Coins klasörüdür.
  • Küresel bir değişken tanımlar - COOLDOWN değişkeni, bir madeni para toplandıktan sonra ne kadar süreyle devre dışı bırakılacağını tanımlamak için daha sonra kullanılır.
Servisleri ve Değişkenleri Başlatma
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
...

Olay işleyicisini tanımlama

Roblox Motoru, 3D dünyayı fiziksel olarak simüle eder ve render, fizik ve ağ ile ilgili olayları yönetmek için birçok mantığı halleder. Kendi mantığınızı bu olaylardan bazıları sırasında scriptlemek istediğinizde, dinleyebilir ve bunları işleyebilirsiniz, motorun geri kalanını yapmasına izin verirsiniz. Bu durumda, madeni paralara dokunma ile ilgili olayları dinleyip işliyorsunuz. Script, bu olayı işlemek için onCoinTouched() yönteminde mantığı tanımlar ve aşağıdakileri yapar:

  • Madeni paranın etkin olup olmadığını algılar - Her Instance nesnesinin, nesnenin 3D dünyada var olup olmadığını tanımlayan bir Enabled boolean niteliği vardır. Nesne niteliklerini GetAttribute() yöntemi ile alabilirsiniz.
  • Bir oyuncunun madeni paraya dokunup dokunmadığını algılar - Eğer bir madeni para etkinse, yöntem, madeni paraya dokunan nesnenin gerçekten bir oyuncu olup olmadığını kontrol etmek için oyuncu hizmetini kullanır. Bir dokunma olayı gerçekleştiğinde, Roblox Motoru, madeni paraya dokunan nesneyi otherPart parametresi olarak geçirir. Script, otherPart'ın ebeveyninin bir oyuncuya ait olup olmadığını kontrol eder.
  • Bir oyuncu dokunduğunda madeni parayı devre dışı bırakır ve 10 saniye sonra yeniden etkinleştirir - Son olarak, bir oyuncu madeni paraya dokunduğunda, yöntem madeni parayı devre dışı bırakır, 10 saniye bekler ve ardından madeni parayı toplama için yeniden etkinleştirir. task.wait() kullanılır, çünkü bu, kod yürütmesini tamamen durdurmadan daha iyi performans sağlar ve diğer iş parçacıklarındaki görevlerin eşzamanlı olarak çalışmasına izin verir.
Olay İşleyicisini Tanımlama
local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Oyuncu bir madeni paraya dokundu
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Oyuncu madeni parayı topladı")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end

Olay işleyicisini bağlama

Simüle edilen tüm 3D nesneler BasePart'tan türetilir ve dolayısıyla bir Touched() olayı vardır. Aşağıdaki döngü, onTouchedEvent() işleyicisini her madeni paranın dokunma olayına bağlar:

  • Tüm madeni paraları döngü ile geçin - Genel yineleme kullanarak her bir madeni parayı döngü ile geçin.
  • İşleyiciyi olaya bağlayın - Döngünün her yinelemesinde, madeni para varsayılan olarak etkinleştirilir, böylece oyunun başlangıcında 3D dünyada görünür. onCoinTouched() işleyici yöntemi de madeni paranın Touched olayına bağlanır, böylece olay her gerçekleştiğinde çalışır. Motor bir dokunma algıladığında, ayrıca dokunan nesneyi otherPart olarak geçirir.
Olay İşleyicisini Bağlama
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end

Mekaniği Test Et

Açılır menüden Test'i seçin ve Oyna'ya tıklayın. Karakterinizi bir madeni paraya dokundurmak için hareket ettirin. Her şey çalışıyorsa, madeni para kaybolur, Çıktı penceresi Oyuncu madeni parayı topladı mesajını yazdırır ve madeni para 10 saniye sonra yeniden görünür.

Oyuncunun bir madeni parayı topladığını onaylayan Stüdyo'nun Çıktı penceresi.
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.