Bir para koleksiyonu mekanizması oluştur

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


Artık 3B dünyanız var, bu eğitimin bu bölümü size bir para toplama mekanizması tanımlamak için ilk senaryonuzu nasıl ekleyeceğinizi öğretir.Bu mekanizma, oyuncuların para toplamasına izin verir ve yakın zamanda toplanmış bir para toplamasını devre dışı bırakır.

Paraları oluşturun

Herhangi bir şeyi senaryolaştırmadan önce, paralarınız olarak kullanmak için dünyada yer tutucu nesneleriniz olması gerekir.Önceki bölümde yaptığınız deniz yığın platformları gibi, paralar basit Part nesneler olabilir.

Paraları oluşturmak için:

  1. Araştırmacı penceresinde, Dünya klasörüne yeni bir klasör ekleyin, ardından adını Paralar olarak değiştirin.

  2. Bir silindir parçasını Altın klasörüne ekleyin, ardından parçayı Altın olarak yeniden adlandırın.

    Studio's Explorer window with the Coin part highlighted. The hierarchy of the Workspace to World folder to Coins folder to Coin part is also highlighted.
  3. Parçayı seçin, ardından Özellikler penceresinde,

    • Set TuğlaRenk to Altın .
    • Malzeme Metal 'e ayarlayın.
    • Boyutu 0.6, 8, 4.
    • Devre dışı bırak CanCollide .Bu, motorun diğer parçaların para içinden geçebileceğini söyler, yani oyuncular onları toplamak için para üzerinden yürüyebilir.
    • Sabitlenmiş etkinleştirin.Bu, motorun asla fizikle ilgili bir simülasyon nedeniyle para konumunu değiştirmemesini söyler, yani oyuncular konumunu etkilemeden paraya dokunabilir.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Birkaç para daha kopyalayın ve test için haritanın etrafına yerleştirin.

    Studio's Explorer window with multiple Coin parts highlighted under the Coins folder. A view of multiple coins on the island and two gray cylinder sea stacks.

Silindir parçalarınız artık para gibi görünüyor ve fizik simülasyonunu engelliyor, ancak oyuncuların onları toplayabilmesi için parçalara mantık eklemelisiniz.

Senaryo oluştur Create the script

Paraların toplanabilir olması için, onlara dokunan oyunculara tepki vermek istiyorsunuz.Roblox Motoru, bir şey bir paraya dokunduğunda sizi bilgilendirebilir, ancak bunu bir senaryoda belirtmeniz gerekir.Bir senaryo oluşturmak için:

  1. Gezgin penceresinde, Sunucu Kod Hizmeti üzerine gelin ve düğmesine tıklayın. Bir bağımsız menü görüntülenir.

  2. Kontekst menüsünden, Komut Dosyası seçin.Yeni bir senaryo, Sunucu Kript Hizmeti altında görüntülenir ve motorun kodu sunucuda çalıştırmasını sağlar ve müşterilerin kodlara erişmesini engeller.

    Studio's Explorer window with both ServerScriptService's plus icon and Script object highlighted.
  3. Komut dosyasını CoinService olarak yeniden adlandırın.

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Varsayılan kodu aşağıdaki kodla değiştirin:


    -- Hizmetler ve değişkenlerin başlatılması
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COOLDOWN = 10
    -- Etkinlik iş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 para dokundu
    coin.Transparency = 1
    coin:SetAttribute("Enabled", false)
    print("Player collected coin")
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Etkinlik dinleyicilerini ayarlama
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Şimdi, bir oyuncu herhangi bir para dokununca, para 10 saniye boyunca kaybolur ve çıktı günlüğü Player collected coin basar.

    Aşağıdaki bölümler, senaryonun daha ayrıntılı olarak nasıl çalıştığını açıklar.

    Hizmetleri ve değişkenleri başlat

    Muhtemelen başka dillerde yazdığınız birçok kod gibi, senaryonun en üstünde daha sonra ihtiyacınız olacak değişkenleri tanımlarsınız.Kodumuz takip edilenyapar:

    • Hizmet örnekleri alın - Roblox hizmetleri, yaygın özellikler için yerleşik işlevsellik sağlar.Kod önce 3B dünyadaki her nesneyi içeren Workspace hizmetinin örneklerini alır ve deneyime bağlı tüm oyuncuları yöneten ve içeren Player hizmeti.

    • Tüm paralara referans alın - Ardından, 3B çalışma alanı tüm para nesnelerine GetChildren() yöntemiyle referans verir.Bu yöntem, ilişkili olduğu nesneye ait her şeyi içeren bir dizi döndürür, ki bu durumda önceden oluşturduğunuz Workspace.World.Coins klasörüdür.

    • Küresel bir değişken tanımlar - COOLDOWN değişkeni, toplandıktan sonra bir parayı devre dışı bırakma süresini tanımlamak için daha sonra kullanılır

      Hizmetler ve Değişkenlerin Başlatılması

      local Workspace = game:GetService("Workspace")
      local Players = game:GetService("Players")
      local coinsFolder = Workspace.World.Coins
      local coins = coinsFolder:GetChildren()
      local COOLDOWN = 10
      ...

    Etkinlik işleyicisini tanımlayın

    Roblox Motoru fiziksel olarak 3B dünyayı simüle eder ve görüntüleme, fizik ve ağ ile ilgili olayları ele almak için birçok mantığı idare eder.Bu olaylardan bazıları sırasında kendi mantığınızı yazmakla ilgileniyorsanız, motorun geri kalanını yaparken onları dinleyip ele alabilirsiniz.Bu durumda, dokunulan para ile ilgili olayları dinler ve ele alırsınız.Senaryo, bu olayın ele alınması için onCoinTouched() yöntemindeki mantığı tanımlar, ki bu takip edilenyapar:

    • Paranın etkinleştirilip etkinleştirilmediğini tespit eder - Her Instance 3B dünyada nesnenin var olup olmadığını tanımlayan bir Enabled booleen özniteliğe sahiptir.Örnek özniteliklerini GetAttribute() yöntemi ile alabilirsiniz.

    • Bir oyuncunun para dokunduğunu algılar - Eğer bir para etkinleştirilmişse, yöntem oyuncunun para dokunduğu nesneyi gerçekten bir oyuncu olup olmadığını kontrol etmek için oyuncu hizmetini kullanır.Bir dokunma olayı meydana geldiğinde, Roblox Motoru para ile temasa geçen nesneyi bir otherPart parametre olarak geçer.Senaryo, otherPart ebeveyninin bir oyuncuya ait olup olmadığını kontrol eder.

    • Bir oyuncu ona dokunduğunda para devre dışı kalır ve 10 saniye sonra yeniden etkinleştirilir - Son olarak, bir oyuncu para dokunduğunda, yöntem para devre dışı kalır, 10 saniye bekler ve ardından koleksiyoniçin para yeniden etkinleştirir. task.wait() , kod yürütmesini tamamen duraklatmadığı için wait() yerine kullanılır, böylece diğer işlemlerin iş parçacıklarının aynı anda çalışmasına izin verir.

      Etkinlik Elemanını 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 para dokundu
      coin.Transparency = 1
      coin:SetAttribute("Enabled", false)
      print("Player collected coin")
      task.wait(COOLDOWN)
      coin.Transparency = 0
      coin:SetAttribute("Enabled", true)
      end
      end
      end

    Etkinlik işleyicisini bağla

    Tüm simüle edilmiş 3B nesneler BasePart'dan miras alır ve bu nedenle bir Touched() etkinliği vardır.Aşağıdaki döngü, takip edilenişlemleri yaparak her parçacığın dokunma etkinliğine onTouchedEvent() el eleçi bağlar:

    • Tüm paraları döngüye sokun - Genel döngü kullanarak her bir parayı döngüye sokun.

    • Elektronik cihazı olaya bağlayın - Döngünün her dönüşünde, para varsayılan olarak etkinleştirilir, bu nedenle deneyimin ilk başlangıcı sırasında 3B dünyada görünür.onCoinTouched() işlemci yöntemi de para olayı her meydana geldiğinde çalışması için para olayının Touched etkinliğine bağlıdır.Motor bir dokunuş tespit ettiğinde, ayrıca objeye dokunan nesneyi de geçer, otherPart .

      Etkinlik işleyicisini bağlama

      for _, coin in coins do
      coin:SetAttribute("Enabled", true)
      coin.Touched:Connect(function(otherPart)
      onCoinTouched(otherPart, coin)
      end)
      end

Mekaniği test et

Para koleksiyon mekanizmasının niyetine uygun çalışıp çalışmadığını görmenin zamanı geldi. Deneyiminizi test etmek için:

  1. Araç çubuğunda, Oyna düğmesine tıklayın. Studio oyun testi moduna girer.

    Play button highlighted in Studio's playtesting options.
  2. Karakterini bir para dokunmak için hareket ettir.Eğer senaryolarınız doğru çalışıyorsa, Çıkış penceresi Player collected coin görüntüler ve para yeniden görünmeden önce 10 saniye boyunca kaybolur.

    Studio's Output window that displays confirmation that the player collected a coin.