Artık 3B dünyanız var, bu bölüm öğreticiyi, ilk senaryonuzu tanımlayan bir koin toplama mekanizmasını eklemek için nasıl öğreteceğinizi gösteriyor. Bu mekanizma, oyuncuların para toplayabilmesini sağlar ve son olarak toplanan bir para için toplama iptal edilir.
Paraları Oluştur
Herhangi bir kodu yazmadan önce, dünyanın herhangi bir yerinde yer tutan geçici nesnelerinizin yerlerine ihtiyacınız vardır. Denizaltı çekirdek platformlarınızın yaptığınız gibi, paralar basit Part nesneleri olabilir.
Madeni paraları oluşturmak için:
In the Explorer window, add a new folder into the World folder, then rename it Coins .
Bir Silindir parçasını Paralar klasına koyun, sonra parçayı Paraya yeniden adlandırın.
Parçayı seç, sonra Özellikler pencerede,
- Set TuğlaRenk to Altın .
- Set Malzeme to Metal .
- Set Boyutu to 0.6, 8, 4 .
- Devre dışı bırakın CanCollide . Bu, motorun diğer parçaların üstünden geçebileceğini söyler, yani oyuncular üstünden geçebilirler ve bunları toplayabilirler.
- Etkinleştir Yerleştiriciyi tak定lır . Bu, motorun herhangi bir fiziksel simülasyon nedeniyle para'nın konumunu asla değiştirmeyeceğini söyler, böylece oyuncular paranın yerini etkilemeden paraya dokunabilirler.
Birkaç ekstra parayı kopyalayın ve onları harita etrafında test amaçlı yerleştirin.
Silindir parçaları artık para gibi görünüyor ve fiziği simüle etmeyi önler, ancak oyuncuların onları toplayabilmesi için onlara mantık eklemelisiniz.
Script'i Oluştur
Paralar toplanabilir hale getirmek için, paralara dokunan oyunculara tepki vermek istiyorsunuz. Roblox motoru, bir paranın bir oyuncuya dokunduğunda sizi bilgilendirebilir, ancak bunu bir senaryoda ilan etmeniz gerekir. Senaryo oluşturmak için:
In the Explorer window, hover over ServerScriptService and click the ⊕ button. A context menu displays.
Konteks menüsünden Script seçin. Yeni bir skript ServerScriptService altında görüntülenir ve motorun üzerindeki skripti çalıştırmayı sağlar ve koderişimini engeller.
Script'i CoinService olarak yeniden adlandır.
Aşağıdaki kodu varsayılan kodla değiştirin:
-- Hizmetleri ve değişkenleri başlatıyorlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- Etkinliğin oluşturucusunu tanımlamalocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Oyuncu bir para dokunulducoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Etkinlik dinleyicileri ayarlanıyorfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)endŞimdi, bir oyuncu bir paraya dokunduğunda, parça 10 saniye içinde görünmez ve çıktı günlüğü Player collected coin ile yazılır.
Kod AçıklamasıAşağıdaki bölümler, kodun nasıl daha ayrıntılı şekilde çalıştığını açıklar.
Hizmetleri ve Değişkenleri Başlatıyor
Muhtemelen başka bir dilinde yazdığınız kodun birçoğunda olduğu gibi, kodunuzun üstündeki gereken değişkenleri tanımlar. Kodumuz takip edilenyapar:
Hizmet istanbulonlarını alın - Roblox hizmetleri, ortak özellikler için içerikteki her bir nesneyi sağlar. Önce 3D dünyasındaki her nesneyi içeren Workspace bağlanan istanbulonları alır ve deneyiminize bağlı tüm oyuncuları yönetir.
Tüm paralara referansları alın - Skript sonra 3D alanının tüm paralara referanslar için GetChildren() metoduyla sorgulanmasını sağlar. Bu metod, önce yaratılan nesnenin bağlı olduğu alanı içindeki her şeyi içeren bir matrisi döndürür. Bu matris
Küresel bir değişken tanımlar - COOLDOWN değişkeni, toplanan bir paranın deaktif edilmesi süresini belirlemek için daha sonra kullanılır.
Hizmetleri ve Değişkenleri Başlatıyorlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
Etkinlik İşleyicini Tanımlama
Roblox motoru 3D dünyasını fiziksel olarak simüle eder ve render, fizik ve ağ işaretlerine ilişkin birçok mantığı işleyebilir. Bu etkinliklerin bir kısmını kodlamak için ilgileniyorsanız, kodu işlemek için motoru dinleyebilir ve işleyebilirsin
Altının etkinleştirilip etkinleştirilmediğini tespit eder - Her Instance 'in bir Enabled özelliği vardır, bu, nesnenin 3D dünyasında olup olmadığını tanımlar. İн스턴ans özelliklerini Class.Instance:GetAttribute()|GetAttribute() yöntemi ile alabilirsiniz.
Bir oyuncunun paraya dokunup dokunmadığını tespit eder. - Bir paranın etkinleştirilmiş olup olmadığını kontrol etmek için yöntem oyuncu hizmetini kullanır. Bir dokunma etkinliği oluştuğunda Roblox motoru, paranın etkinliğini test etmek için otherPart paramet
Bir oyuncu onu dokunursa, parayı tekrar etkinleştirir ve 10 saniye sonra tekrar etkinleştirir - Son olarak, bir oyuncu parayı dokunursa, yöntem parayı devre dışı bırakır, ardından 10 saniye içinde tekrar etkinleşt
Etkinlik İşleyicisini Tanımlamalocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Oyuncu bir para dokunulducoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
Etkinlik İşleyicisi'ni Bağlama
Tüm simüle edilmiş 3D nesneler BasePart 'dan miras alır ve bu nedenle bir Touched() etkinliği vardır. takip edilendöngü, onTouchedEvent() bağlayıcını her para dokunma etkinliğine bağlayarak her para dokunma etkinliğine bağlayarak bağlar:
Tüm paralar arasında dolaşım - Genel itme kullanarak her bir paranın dolaşımını dolaştırın.
Eylemi oluşturma döngüsündeki her itiraf etme işleminden önce etkinleştiriciyi etkinleştirir - Her tekrar etkinleştirici işlemi sırasında, paranın 3D dünyasındaki ilk görünümü gör
Etkinlik İşleyicisi'ni Bağlamafor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
Mekanik'i Oyun test et
Madeni para koleksiyonu mekanizmasının istediğiniz gibi çalıştığını görmek zamanı. Deneyiminizi test etmek için:
Menü çubuğunda Oyna düğmesine tıklayın. Studio oyun testi moduna girer.
Karakterinizi bir paraye dokunmak için hareket ettirin. Eğer senaryonuz doğru çalışıyorsa, Çıkış penceresi Player collected coin gösterir ve paranın 10 saniye içinde yeniden görünmesinden önce kaybolur.