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.
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.
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:
- 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.
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.
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
endOlay 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.
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
endMekaniğ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.
