Lider tablosu oluşturulduktan sonra, oyuncuların toplayacak bir şeye ihtiyacı vardır.Bunun için, oyuncuların dünyada bulması gereken bir 3B öğe oluşturmanız gerekir.Aşağıda, oyuncuların eşyaları toplama sürecinin bir videosu bulunmaktadır.
Bir öğe oluştur Build an item
Deneyimdeki öğeler, oyuncuların bir araç kullanarak hasat ettiği 3B modellerdir.Her öğe, bir kez hasat edildikten sonra kaybolur ve sınırlı bir süre sonra yeniden ortaya çıkar.
öğeiçin, oyun tasarım belgenize geri dönün. Bu seri örnek olarak kristalleri kullanır.
Pazar yerinde güvenilir kullanıcılar tarafından bulunan parçaları veya nesneleri kullanarak bir nesne oluşturun.
İstendiğinde, kristal parçasını bu bağlantıyla indirin. Eklemek için çalışma alanına sağ tıklayın ve Dosyadan ekleyin seçeneğini seçin.
Kendi parçanızı kullanıyorsanız, tüm parçaları bir Model içine gruplayı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ı düzenleyen bir model oluşturur.
Parçaların hepsi sabitlenmiş olduğundan emin olun .
Bu nedenle öğeler kaybolduğunda hasat edilemez, durumunu izlemek için BoolValue adlı bir şey oluşturun.
CanHarvest için Özellikler'de, Değer kutusunu kontrol edin. Değer kutusunu kontrol etmek, oyuncuların öğeyi toplayabilmesini sağlar, yani oyuncular bir öğeyi toplayabilir.
Bir araç oluştur
Oyuncuların bir balta veya kürek gibi bir şey toplayabilmeleri için bir şeye ihtiyaçları vardır.Roblox'ta, oyuncuların donatabileceği ve kullanabileceği eşyalara aletler denir.Bu ders, tüm parçalarla bir başlangıç aracı kullanır ve daha sonra özelleştirebileceğiniz zaten hazır bir animasyon kullanır.

Araç ekleyin
Oyuncuların başlangıç aracını kullanması için, indirin ve StarterPack'e yerleştirin.
Araştırmada, çalışma alanı altında, StarterPack'e sağ tıklayın. Ardından, Dosyadan Sıkıştır'ı seçin .
İndirilen dosyayı seçin, starterTool.rbxm .
Projenizi test edin.Oyuncular, başlatanda araçla donatılmalıdır.Oyun içinde, aracı donatmak veya kaldırmak için 1 tuşuna basın.Sallamak için sol tıklayın.
Araç kodlayın
Araç bir hasat edilebilir nesneye vurursa ve oyuncunun çantasında yeterli alan varsa, oyuncunun eşya sayısı liderlik tablosu1 artar.Bir öğeyi hasat etmek, birkaç saniye boyunca kaybolmasını sağlar ve yeniden ortaya çıkmadan önce birkaç saniye boyunca hasat edilemez hale gelir.Bu, oyuncuları aynı öğeye tıklamak yerine daha fazla öğe bulmak için keşfetmeye teşvik eder.
Senaryoyu kurun
Bu noktada, araca bir senaryo ekleyin. Bu senaryo, aracın hasat edilebilir bir nesneye dokunduğunda neler olduğunu ele alır.
StarterPack'te, StarterTool altında, ToolScript adlı yeni bir senaryo ekleyin.
Senaryoda, üstte açıklayıcı bir yorum yazın ve ardından araç parçasını ve araç kendisini depolamak için değişkenler oluşturun.
-- Oyuncular bir hasat edilebilir parçaya dokunduğunda bir eşya verirlocal tool = script.Parentlocal toolPart = tool.Handle
Eşyaları kontrol et
Araç bir nesneye dokunduğunda, o nesnenin içinde CanHarvest olup olmadığını ve boolean'un True olup olmadığını kontrol eder.
Yeni bir işlev oluştur onTouch() ile bir parametre adında partTouched .
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)endBu işlevde, canHarvest adlı yerel bir değişken oluşturun.Sonra, bu parçanın ebeveyninde CanHarvest boolean olup olmadığını görmek için FindFirstChild() işlevini kullanın.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")endŞimdi senaryo, aslında herhangi bir şey bulunduğunu ve varsa kodu çalıştırması gerekiyor.Bunu yapmak için, koşul canHarvest olduğunda bir if ifadesi oluşturun.Eğer canHarvest 'de herhangi bir şey varsa, bu ifade doğru değerlendirilir.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendendif ifadesinde, senaryonun çalışıp çalışmadığını görmek için bir yazdırma ifadesi ekleyin. Çalıştığından emin olduktan sonra öğelerin hasat edilmesi için mantığı kodlayabilirsiniz.
if canHarvest then-- Kodun çalışıp çalışmadığını test etmek için kullanılırprint("Found an item")endİşlevin end ifadesinin altında, ekleyin toolPart.Touched:Connect(onTouch) .Bu, senaryonun araç (veya bu durumda tutamağı) ile herhangi bir şeye dokunduğunu kontrol etmesine ve eğer öyleyse, onTouch() 'yi aramasına izin verir.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)Projeyi oynayın ve araştırılabilir bir öğe üzerinde araç kullanın (sallamak için sol tıklayın). Çıktı penceresinde "Bir öğe bulundu" mesajını gördüğünüzden emin olun.
Sorun giderme ipuçları
mesajgörmediyseniz, aşağıdaki ipuçlarını deneyin.
- Özel parçalar ve dokular kullanıyorsanız, bir hata almak mümkündür.Yazılım yalnızca CanHarvest nesnesi, aracın dokunduğu parçanın bir çocuğuysa çalışır.
- Araç StarterPack'de olduğundan emin olun, çalışma alanında değil.
- Parçanın sabitlendiğinden emin olun.
Oyuncu istatistiklerini alın
Oyuncunun eşyalarını artırmadan önce, aracın o oyuncunun liderlik tablosukaç tane eşyaya sahip olduğunun yerini bulması gerekir.Araç liderlik tablosueriştiğinde, o oyuncunun öğe sayısını değiştirebilir.
Öncelikle, aracı kullanan oyuncuyu alın. AraçScript'te, local item = toolitem altında ve özel işlevin üzerinde, şunu yazın:
local item = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)Sonraki satırda, FindFirstChild() işlevini kullanarak oyuncunun lider istatistiklerini bulun.
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)local playerStats, öğeleri ve boşluk 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 nesneyi kontrol et
Artık araç senaryosunda oyuncuÖğeleri ve oyuncuBoşlukları değişkenleri oluşturuldu, oyunculara bir öğe vermeye başlayabilirsiniz.Araçla temasa giren nesnenin hasat edilebileceğini kontrol etmek için oluşturulan işlevi kullanın ve oyuncunun lider tablosunda gösterilen öğeleri bir artırmak için çantasında yeterli alanı varsa.
Senaryo, karşılanması gereken iki koşul ile bir if ifadesine ihtiyaç duyacaktır.Bir if ifadesi oluşturarak başlayın, ardından aşağıdaki koşulları ekleyin, and anahtar kelimesi ile bağlantılı.
- 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 kendisinde, oyuncunun öğelerine playerItems.Value += 1 yazarak ekleyin.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endendProjenizi oynayın; bir öğeyi hasat etmek ve öğe sayısının arttığını kontrol etmek için aracınızı kullanın.
Eşyayı öğe
Öğe toplandığında, iki şekilde sıfırlanacaktır:
- Eşya kaybolacak ve etkileşime girilemeyecek
- CanHarvest yanlış değere ayarlandı
Öğe kısa bir süre sonra normale dönecektir.Bu şekilde, oyuncular sadece her hasat için bir öğe alır ve orijinal sıfırlamalar sırasında daha fazlasına bakmak zorundadır.
Eşyalar eklenen yerin altında, canHarvest 'yi false olarak ayarlayın.Oyuncular öğehasat ettiklerinde canHarvest değerini yanlış yaparak, senaryo her araç için birden fazla eşya vermeyecektir.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendendDeğeri yalan olarak ayarladıktan sonra, parçanın Saydamlığını 1 (görünmez) ve CanCollide'yi yalan olarak ayarlayın, yani oyuncular ona dokunamaz.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseendEşya sıfırlanması için task.wait(5) türüne zaman verin. 5, önerilen bir sayıdır ve belki de deneyiminiz için ne kadar süre istediğinize bağlı olarak değişebilir.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)endBeklemeden sonra, önceki kodun aksine, CanHarvest'i true'a ayarlayın ve Transparency ve CanCollide'yi orijinal değerlerine sıfırlayın.
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueendProjeyi oynayın ve kontrol etedin:
- Oyuncu, bir öğeyi hasat etmek için yalnızca 1 öğe alır.
- Öğe kaybolur ve ardından beş saniye sonra yeniden ortaya çıkar.
Sorun giderme ipuçları
Bu noktada, eğer kontrollerden biri geçmediyse aşağıdakilerden birini deneyin.
- Transparans ve CanCollide'nin aynı şekilde telaffuz edildiğinden ve büyük harflerle yazıldığından emin olun.
- canHarvest.Value'yi kullandığınızdan emin olun ve canHarvest = true değil.
Tam Araç Yazılımını Tamamla
Senaryonun bitmiş bir versiyonu aşağıda referans olarak gösterilebilir.
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
-- Kısmı sıfırla partTouched, hasat edilen öğe
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- Hasat edilen öğe yeniden ortaya çıkarın ve tekrar kullanılabilir hale getirin
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)