Eşyaları topla

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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.

  1. 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.

  2. 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.

  3. Parçaların hepsi sabitlenmiş olduğundan emin olun .

  4. Bu nedenle öğeler kaybolduğunda hasat edilemez, durumunu izlemek için BoolValue adlı bir şey oluşturun.

  5. 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.

  1. Aşağıdaki başlangıç ​​aracını indirin.

  2. Araştırmada, çalışma alanı altında, StarterPack'e sağ tıklayın. Ardından, Dosyadan Sıkıştır'ı seçin .

  3. İndirilen dosyayı seçin, starterTool.rbxm .

  4. 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.

  1. StarterPack'te, StarterTool altında, ToolScript adlı yeni bir senaryo ekleyin.

  2. 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 verir
    local tool = script.Parent
    local 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.

  1. Yeni bir işlev oluştur onTouch() ile bir parametre adında partTouched .


    local tool = script.Parent
    local toolPart = tool.Handle
    local function onTouch(partTouched)
    end
  2. Bu 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
  3. Ş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 then
    end
    end
  4. if 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ır
    print("Found an item")
    end
  5. İş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 then
    print("Found an item")
    end
    end
    toolPart.Touched:Connect(onTouch)
  6. 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.

  1. Öncelikle, aracı kullanan oyuncuyu alın. AraçScript'te, local item = toolitem altında ve özel işlevin üzerinde, şunu yazın:


    local item = toolitem
    local backpack = tool.Parent
    local player = backpack.Parent
    local function onTouch(partTouched)
  2. Sonraki satırda, FindFirstChild() işlevini kullanarak oyuncunun lider istatistiklerini bulun.


    local backpack = tool.Parent
    local player = backpack.Parent
    local playerStats = player:FindFirstChild("leaderstats")
    local function onTouch(partTouched)
  3. 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.

  1. 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 then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    end
    end
    end
  2. if ifadesinin kendisinde, oyuncunun öğelerine playerItems.Value += 1 yazarak ekleyin.


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    end
    end
  3. Projenizi 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.

  1. 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 then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    end
    end
  2. Değ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 then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    end
  3. Eş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 then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    task.wait(5)
    end
  4. Beklemeden 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 = true
    partTouched.Transparency = 0
    partTouched.CanCollide = true
    end
  5. Projeyi 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)