Oyuncu Tehlikelerini 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.


Tehlike nesneleri, oyuncuların onlara dokunduğunda oyuncunun sağlığını azaltır. Bir basit başlangıç ​​noktası olarak, bu öğretici'nin başlığındaki bu bölüm oyuncunun deneyimindeki suyun aynı seviyesinde bir büyük görünmez parçayı oluşturmak için öğretir, böylece düşmeye başlayan oyuncu sağlığını sıf

Basit Bir Su Tehlikesi Oluştur

Basit su tehlikesini oluşturmak için:

  1. In the Explorer window, add a new folder into the World folder, then rename it Hazards . Ensure that the name is spelled correctly with the correct casing, otherwise the code won't work.

  2. Tehlike klasındaki blok parçasını yerleştir ve tehlike adını ver.

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. Parçayı adanın ve platformların etrafındaki su hattını kapsayacak şekilde hareket ettirin ve ölçekleyin. Örneğin, Adalet Zıplama - Kodlama deneyiminin Boyutu825, 1, 576 ve 2>CFrame.Position2> ile 5>

    A far out view of all of the cylinder sea stacks and the island. A large block part covers the water where a player could land if they fell from a sea stack.
  4. Parçayı seçin, sonra Özellikler penceresinde şu özellikleri yapılandırın, böylece tehlike görünmez ve oyuncular doğrudan geçebilir:

    • Set Görünürlüğü to 1 . Bu, riskin görünmez olduğunu yapar, böylece asıl su risk olarak görünür.
    • Devre dışı bırakın CanCollide . Bu, motorun diğer parçaların tehlikeye karşı dirençli olduğunu gösterir, bu yüzden oyuncular tehlikeye düşebilir.
    • Etkinleştir Yerleştirilmiş . Bu, motorun herhangi bir fiziksel simülasyon nedeniyle tehlike pozisyonunu asla değiştirmeyi söyler, böylece oyuncular pozisyonunu etkilemeden tehlikeye dokunabilir.
  5. SunucuScriptServisi içinde bir Script oluşturun, sonra HazardService olarak yeniden adlandırın.

  6. Aşağıdaki kodu varsayılan kodla değiştirin:


    local Players = game:GetService("Players")
    local Workspace = game:GetService("Workspace")
    local hazardsFolder = Workspace.World.Hazards
    local hazards = hazardsFolder:GetChildren()
    local function onHazardTouched(otherPart)
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.Health = 0
    end
    end
    end
    for _, hazard in hazards do
    hazard.Touched:Connect(onHazardTouched)
    end

    HazardService CoinService ile benzerliği birçok yer alır. Ancak, bir tehlikeye dokunduğunda, oyuncu sağlıklarını 0 olarak değiştirir, böylece bir tehlikele dokunmadığında sağlıklarını korur.

    Eğer modifiye etmek, eklemek veya kaldırmak isteriyorsanız, deneyinizde tehlike nesnelerini değiştirmeyi, eklemek veya kaldırmayı özelleştirmek için kullanın. As long as they're contained in the Hazards 夹, the code loop connects the event handler to all of your hazards.

Oyuncu Hayat Döngüsüne Bağlan

Oyuncu hayat döngüsü, oyuncuların deneyiminizde etkileşim kurduğu olayları temsil eder, bunlar katılma, ayrılma veya yeniden doğma gibi. Oyuncuların her büyük hayat döngüsü etkinliği için mantığı doğru olarak uygulamak için bu etkinliklere bağlayıcı olmalısınız. CoinService kriptindeki aşağıdaki


local function onPlayerAdded(player)
-- Oyuncu paralarını 0'a sıfırla
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild oyuncu döngüsünü durdurur, bu nedenle aşağıda ayrı bir sub-Thread'de yapılmalıdır
task.spawn(function()
-- Bir oyuncu öldüğünde
character:WaitForChild("Humanoid").Died:Connect(function()
-- Oyuncu paralarını 0'a sıfırla
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- PlayerAdded etkinliğine bağlanmadan önce eklenen herhangi bir oyuncuyu başlatın
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
local function onPlayerRemoved(player)
updatePlayerCoins(player, function(_)
return nil
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoved)

Kod, uygun takip etkinlikler sırasında para sayısını sıfırlayan işlevler tanımlar:

  • Player.PlayerAdded deneyime bir oyuncu katıldığında ateşlenir ve para sayısını 0 olarak ayarlar.
  • Player.CharacterAdded dünyaya bir oyuncuğun karakter modeli eklenildiğinde ateşlenir. Bu, PlayerAdded ve oyuncu yeniden doğduğunda gerçekleştirilir.
  • Humanoid.Died , bir oyuncu öldüğünde ateş eder ve 0 para sayısını ayarlar. task.spawn() , bunun için ayrı bir başlıca oluşturur, böylece diğer oyuncu hayat döngüsünün diğer yönleri işlenebilir.
  • Player.PlayerRemoved oyunu terk edildiğinde çalışır ve oyunun durumunu temizlemek için.
  • Bu kod potansiyel bir sorun içeriyor, oyuncular Players.PlayerAdded etkinliği çalıştırılmadan önce para toplayabilir ve ardından para sayılarını sıfırlayabilir. Bu sorunu mitig etmek için, kod yenileme veya oyuncunun karakterini dondurma gibi çözümleri düşünün. Ancak, bu çözümler bu öğ

Oyun testi

Oyuncunun tehlikesi istediğiniz gibi çalıştığını görmek zamanı. Suya dokunduğunuzda karakteriniz ölmeli ve paralarını kaybetmelidir. oyuntest 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. Biraz para toplamak için karakterini hareket ettir, sonra suya atla. Eğer senin kodlar doğru çalışıyorsa, karakterin ölür ve liderlik tablosundaki para sayısı sıfırlanır 0 .