Artık 3D bir dünyaya sahip olduğunuza göre, ilk scriptinizi ekleyebilirsiniz. Bu bölümde, oyuncuların jetonları toplamasına olanak tanıyan ve jetonlar toplandıktan sonra geçici olarak devre dışı bırakılan bir jeton koleksiyonu mekaniği oluşturacaksınız.
Jetonları oluşturun
Herhangi bir şey scriptlemek için, öncelikle dünyada jetonlarınızı kullanmak için yer tutucu nesneler oluşturmanız gerekir. Önceki bölümde yaptığınız deniz yığını platformları gibi, jetonlar da basit Part nesneleri olabilir.
Jetonları oluşturunWorkspace > World içinde Jetonlar adlı yeni bir klasör oluşturun.Jetonlar klasörünün içinde, Gold renk olarak ayarlanan, Metal malzeme olarak belirlenen, Boyut 0.6, 8, 4 olan ve Yönlendirme 90, 0, 0 ayarlanmış bir silindirik Parça adıyla Coin oluşturun.CanCollide'ı devre dışı bırakın ve Anchored'ı etkinleştirin.Daha sonra, Coin parçasını birkaç kez kopyalayın ve kopyaları adanın etrafına ve platformlara saçın, böylece deniz yığını seviyelerinden erişilebilir olsun.Her bir kopyayı Coin olarak adlandırın.
Scripti oluşturun
Sonraki adımda, jetonların oyunculara yanıt vermesini sağlayacaksınız. Roblox motoru, bir şeyin bir jetona dokunduğunu algılayabilir, ancak jetonun nasıl tepki vermesi gerektiğini tanımlamak için bir script kullanmanız gerekiyor.
CoinService OluşturServerScriptService içinde, aşağıdaki kod ile CoinService adında bir Script oluşturun:```lua-- Servisleri ve değişkenleri başlatmalocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- Olay işleyicisini tanımlamalocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Oyuncu bir jetona dokunducoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Oyuncu jetonu topladı")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Olay dinleyicilerini ayarlamafor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end```
Artık bir oyuncu bir jetona dokunduğunda, jeton 10 saniye boyunca kaybolur ve çıktı kaydında Oyuncu jetonu topladı mesajı yazılır.
Aşağıdaki bölümler, scriptin nasıl çalıştığını daha ayrıntılı bir şekilde açıklar.
Servisleri ve değişkenleri başlatma
Diğer dillerde muhtemelen yazdığınız birçok kodda olduğu gibi, daha sonra ihtiyaç duyacağınız değişkenleri scriptin üstünde tanımlarsınız. Bizim kodumuz aşağıdakileri yapmaktadır:
- Tüm jetonların referanslarını alma - Script, 3D çalışma alanında, GetChildren() yöntemi ile jeton nesnelerinin tüm referanslarını sorgular. Bu yöntem, kendisine bağlı her nesnenin ebeveyn olduğu şeyi içeren bir dizi döner. Bu durumda, daha önce oluşturduğunuz Workspace.World.Coins klasörüdür.
- Küresel bir değişken tanımlama - COOLDOWN değişkeni, toplandıktan sonra bir jetonun devre dışı bırakılma süresini tanımlamak için sonraki aşamalarda kullanılacaktır.
Servisleri ve Değişkenleri Başlatmalocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
Olay işleyicisini tanımlama
Roblox Motoru, 3D dünyayı fiziksel olarak simüle eder ve görüntüleme, fizik ve ağ ile ilgili olayları işlemek için birçok mantığı yönetir. Kendi mantığınızı bazı bu olaylara scriptlemek istediğinizde, dinleyebilir ve bunları işleyebilirsiniz ve motorun geri kalanını yapmasına izin verebilirsiniz. Bu durumda, jetonlara dokunmayla ilgili olayları dinler ve işler. Script, bu olayı işlemek için onCoinTouched() yönteminde mantığı tanımlar ve aşağıdakileri gerçekleştirir:
- Jetonun etkin olup olmadığını belirler - Her Instance'in 3D dünyada var olup olmadığını tanımlayan bir Enabled boolean niteliği vardır. Örneğin, örnek niteliklerini GetAttribute() metodu ile alabilirsiniz.
- Bir oyuncunun jetona dokunup dokunmadığını belirler - Bir jeton etkinse, işlemci, jetona dokunan objenin gerçekten bir oyuncu olup olmadığını kontrol etmek için oyuncu hizmetini kullanır. Bir dokunuş olayı gerçekleştiğinde, Roblox motoru dokunan objeyi otherPart parametresi olarak geçer. Script, otherPart'in ebeveyninin bir oyuncuya ait olup olmadığını kontrol eder.
- Bir oyuncu dokunduğunda jetonu devre dışı bırakır ve 10 saniye sonra yeniden etkinleştirir - Son olarak, bir oyuncu jetona dokunursa, yöntem jetonu devre dışı bırakır, 10 saniye bekler ve ardından jetonu tekrar toplamak için etkinleştirir. task.wait() kullanılmaktadır çünkü, kod yürütmesini tamamen durdurmak yerine daha iyi bir performans sunarak, diğer ipliklerdeki görevlerin eşzamanlı ç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 jetona dokundu
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Oyuncu jetonu 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'den miras alır ve dolayısıyla Touched() olayı vardır. Aşağıdaki döngü, onTouchedEvent() işleyicisini her jetonun dokunma olayına bağlar:
- Tüm jetonların üzerinden döngü geçin - Jetonları genel bir yineleme ile döngüye alarak geçin.
- İşleyiciyi olaya bağlayın - Döngünün her yinelemesinde, jeton varsayılan olarak etkinleştirilir, böylece oyunun başlangıcında 3D dünyada görünür. onCoinTouched() işleyici metodu da her dokunma olayı gerçekleştiğinde çalışması için jetonun Touched olayına bağlıdır. Motor dokunma algıladığında, dokunan objeyi otherPart olarak da geçer.
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 oynatın
Dropdown'dan Test seçeneğini seçin ve Play'e tıklayın. Karakterinizi bir jetona dokundurmak için hareket ettirin. Her şey çalışıyorsa, jeton kaybolur, Çıktı penceresi Oyuncu jetonu topladı mesajını gösterir ve jeton 10 saniye sonra tekrar görünür hale gelir.
