Lider tablosu oluşturulduktan sonra, oyuncular toplamak için bir şeye ihtiyaç duyuyor. Bunun için, oyuncuların dünyada bulabileceği 3D öğeleri oluşturmalısınız. Aşağıda, oyuncuların öğeleri toplama sürecinin bir video olduğunu gösteriyor.
Bir Eşyayı Oluştur
Deneyimdeki öğeler oyuncuların toplum için toplama aracı olarak kullandığı 3D modelleridir. Her bir öğe, bir kez toplandıktan sonra, sınırlı bir süreden sonra tekrar görünür.
öğeiçin oyun tasarımınıza geri dönün. Bu seri kristalleri örnek olarak kullanır.
Güvenilir kullanıcıların Marketplace'de bulduğu parçaları veya nesneleri kullanarak bir nesne oluşturun.
İstediğinizde, bu bağlantı ile kristal parçayı indirin. Onu eklemek için Çalışma Alanı'na sağ tıklayın ve Arşiv'den Ekle seçeneğini seçin.
Kendi parçanızı kullanıyorsanız, tüm parçaları bir Model içine toplayın. Bunu yapmanın bir yolu, tüm öğeleri seçmek, bir parçaya sağ tıklamak ve Grup seçmektir. Bu, parçalarınızı organize eden bir model oluşturur.
Parçaların tümü ancak olmalıdır.
Öyleyse öğeler görünmezken toplanmaz, CanHarvest adındaki bir BoolValue oluşturun toplama durumunu izlemek için.
CanHarvest'da Özellikler'de, Değer Değer kutusunu kontrol edin. Değer kutusunu kontrol etmek, oyuncuların öğeyi toplayabileceğini ifade eder.
Bir Alet Oluşturulması
Oyuncular bir balta veya kürek gibi bir şeye ihtiyaç duyar. Roblox'ta, oyuncular takıp kullanabileceği öğelerin adı aletler dir. Bu ders, ilk başta her bir parçaya ve animasyonuna sahip bir başlangıç aleti kullanır.
Araç Ekleme
Oyuncular başlangıç araçlarını kullanabilmek için, indirin ve StarterPack'te yerleştirin.
Explorer'da, Workspace'ta, StarterPack'e sağ tıklayın. Sonra Dosyadan İçeriği Ekle seçin.
Yüklenen dosyayı seçin, starterTool.rbxm .
Projenizi test edin. Oyuncular oyuna başlatalet ile donatılmalıdır. Oyun içinde, 1 ile aleti takmak veya çıkarmak için tıklayın. Sol tıklama ile aleti sallayın.
Araç Kodlanıyor
Araç bir hasat edilebilir nesneye vurur ve oyuncu çantasında yeterli alan varsa, oyuncunun öğe sayısı liderlik tablosu1 artar. Bir öğeyi toplamak, birkaç saniye boyunca görünmez hale gelir ve birkaç saniye boyunca yeniden ortaya çıkmadan önce toplanmaz. Bu, oyuncuların daha fazla öğeyi bulmasını sağlar, aynı öğey
Script'i ayarlama
Bu noktada, araç içine bir senaryo ekleyin. Bu senaryo, aletin bir hasat alanına dokunduğunda neler olacağını ele alır.
StarterPack'ta, StarterTool altında, ToolScript adında yeni bir senaryo ekleyin.
Skriptte, aşağıda açıklayıcı bir yorum yazın ve ardından araç parçasını ve araç kendisiyle ilgili ortam değişkenleri oluşturun.
-- Hasat edilebilir bir parçaya dokununca oyuncuya öğe verirlocal tool = script.Parentlocal toolPart = tool.Handle
Eşyalar için Kontrol
Araç bir nesneye dokunduğunda, bu nesnenin CanHarvest içinde bulunduğunu veya boBoolean'ın Açık olduğunu kontrol eder.
- partTouched ile adlandırılmış bir yeni işlev oluşturun.
local tool = script.Parent
local toolPart = tool.Handle
local function onTouch(partTouched)
end
Bu işlevde, canHarvest adında bir yerel değişken oluşturun. Sonra, FindFirstChild() işlevini kullanarak, bu bölgenin ebeveyninde CanHarvest olup olmadığını görün.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")endŞimdi, kodun gerçekten herhangi bir şey bulunduğunu ve eğer öyleyse, kodu çalıştırması gerekir. Bunu yapmak için, şartın canHarvest olduğu bir ifade oluşturun. Eğer canHarvest içinde herhangi bir şey varsa, bu ifade gerçekten doğru değerlendirilir.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendendif ifadesine, script'in çalışıp çalışmadığını görmek için bir print ifadesi ekleyin. Logik, çalıştığından emin olduktan sonra öğeleri toplama için kodlayabilirsiniz.
if canHarvest then-- Kodun işlediğini test etmek için kullanılırprint("Found an item")end함数'nin end ifadesi altında, toolPart.Touched:Connect(onTouch) ekleyin. Bu, script'nin araç üzerinde herhangi bir şeyi dokunup dokunmadığını kontrol etmesine izin verir ve eğer öyleyse, onTouch() çağrılır.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)Projeyi oynat ve araz bir öğeye (güvenli olmak için sol tıkla) kullan the tool. Make sure you see the message "Bir öğeyi buldum" in theOutput Window.
Hata ayıklama ipuçları
Eğer mesajı göremiyorsanız, aşağıdaki ipuçlarını deneyin.
- Özel parçalar veya malzemeler kullanıyorsanız, bir hata alabilirsiniz. Skript sadece CanHarvest nesnesi arazi aletinin dokunduğu parçanın bir çocuğu olduğunda çalışır.
- Araç StarterPack'ta, İş Alanında değil, olduğundan emin olun.
- Parçanın yerleştirildiğinden emin olun.
Oyuncu İstatistiklerini Almak
Oyuncunun öğelerini artırmadan önce, araç oyuncunun liderlik tablosukaç tane öğe olduğunu bulmalıdır. Araç liderlik tablosueriştiğinde, oyuncunun öğe sayısını değiştirebilir.
Önce, araç kullanıcısını elde edin. AraçScript'te, local item = toolitem altında ve özel fonksiyonun üstünde, yaz:
local item = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)Önümdeki satırda, FindFirstChild() işlevini kullanarak oyuncunun lider tablosunu bulun.
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)local playerStats altında, öğeleri ve alanların istatistiklerini depolamak için değişkenler oluşturun.
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
Hasat Edilebilir Bir Objeyi Kontrol Ediliyor
Araç scriptinin artık oyuncuItems ve oyuncuSpaces değişkenleri oluşturduğunda, oyunculara bir öğe vermeye başlayabilirsiniz. Arayüz oluşturma işlevini kullanarak, araç ile etkileşime geçen oyuncunun eline geçebilecek öğeleri gösteren bir sayfada gösteren bir öğe vermeyi kontrol edebilirsiniz.
Kodun iki şartını karşılayacak bir ifadeye ihtiyacı olacak. ifadeyi oluşturmak ile başlayın, sonra and anahtar kelimesiyle bağlantılı olarak aşağıdaki koşulları ekleyin.
- canHarvest.Value == true
- playerItems.Value < playerSpaces.Value
local function onTouch(partTouched)local canHarvest = partTouched.Parent:FindFirstChild("CanHarvest")if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenendendendif ifadesinin kendisi, playerItems.Value += 1 'i oyuncunun öğelerine ekleyin.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endendProjenizi oynatın; aracınızı kullanarak bir öğeyi hasat edin ve öğe sayısını artırın.
Eşyayı Sıfırlama
Öğe toplanınca, iki yolda sıfırlanır:
- Eşya kaybolacak ve etkileşime geçmez
- CanHarvest ayarı false olarak belirlenmiştir
Öğe kısa bir süre sonra normale dönecek. Bu yol, oyuncular sadece her hasat için bir öğe alır ve orijinal sıfırlanana kadar etrafta dolaşmalıdır.
Eşyaların eklenmesi altında, canHarvest değerini canHarvest yapmayı sağlayın. Oyuncular öğeyi topladığında değerini canHarvest olarak ayarlayarak, kullanıcı başına aşağıdaki araça daha fazla bir öğe vermez.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendendDeğer yanlış olarak ayarlandıktan sonra, parçanın Görünürlüğünü 1 (görünmez) olarak ayarla ve CanCollide'yi yanlış olarak ayarla, oyuncuların dokunamayacağı anlamına geliyor.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseendEkranınızın sıfırlaiçin zaman vermek için task.wait(5) yazın. 5, önerilen bir sayıdır ve belki de deneyiminiz için ne kadar uzun süre istediğinizi farklı yapabilir.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)endBekledikten sonra, CanHarvest'ı kodve Transparency ve CanCollide'ı varsayımlarına dönüştürün.
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueendProjeyi oynat ve kontrol et:
- Bir öğeyi hasat etmek için sadece 1 öğe alır.
- Öğe beş saniye sonra tekrar görünür.
Hata ayıklama ipuçları
Bu noktada, bir denetleyiciden başarısız olan biri varsa, aşağıdaki birinden deneyin.
- Transparency ve CanCollide'ın isimlerinin ve harflerinin doğru yazıldığından emin olun.
- Harvest = true değerini kullanın.
Komut Kısmını Tamamla
Skriptin bitirilmiş bir versiyonu aşağıda referanslanabilir.
local toolPart = script.Parent
local tool = toolPart.Parent
local backpack = tool.Parent
local player = backpack.Parent
local playerStats = player:FindFirstChild("leaderstats")
local playerItems = playerStats:FindFirstChild("Items")
local playerSpaces = playerStats:FindFirstChild("Spaces")
local function onTouch(partTouched)
local canHarvest = partTouched:FindFirstChild("CanHarvest")
if canHarvest then
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
playerItems.Value += 1
canHarvest.Value = false
-- ParçaTouched, hasat edilen öğe
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- Hasarlı öğeyi tekrar ekme ve kullanılabilir hale getir
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)