Bir Para Koleksiyonu Oluşturucu 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 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:

  1. In the Explorer window, add a new folder into the World folder, then rename it Coins .

  2. Bir Silindir parçasını Paralar klasına koyun, sonra parçayı Paraya 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ç, 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.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Birkaç ekstra parayı kopyalayın ve onları harita etrafında test amaçlı 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ı 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:

  1. In the Explorer window, hover over ServerScriptService and click the button. A context menu displays.

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

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

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


    -- Hizmetleri ve değişkenleri başlatıyor
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COOLDOWN = 10
    -- Etkinliğin oluşturucusunu 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 dokunuldu
    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 dinleyicileri ayarlanıyor
    for _, coin in coins do
    coin: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.

    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ıyor

      local Workspace = game:GetService("Workspace")
      local Players = game:GetService("Players")
      local coinsFolder = Workspace.World.Coins
      local 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ı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 dokunuldu
      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 İş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ğlama

      for _, coin in coins do
      coin: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:

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

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. 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.

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