Oyuncu tehlikeleri 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 onlara dokunduğunda sağlığı azaltır.Basit bir başlangıç noktası olarak, bu eğitimin bu bölümü, deneyiminizdeki suyla aynı seviyede büyük görünmez bir parça nasıl oluşturacağınızı öğretir, böylece tehlikeye düşmek oyuncunun sağlığını sıfıra düşürür ve deneyimin başlangıcına geri döndürür.

Temel bir su tehlikesi oluştur

Temel su tehlikesini oluşturmak için:

  1. Araştırmacı penceresinde, Dünya klasörüne yeni bir klasör ekleyin, ardından adını Tehlikeler olarak değiştirin.Adın doğru telaffuz edildiğinden emin olun, aksi takdirde kod çalışmayacaktır.

  2. Tehlikeler klasöründe, bir blok parçasını yerleştirin ve adını Tehlike olarak değiştirin.

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. Parçayı hareket ettirin ve ölçeklendirin, böylece adanın ve platformların etrafındaki su hattını kapatın.Örneğin, örnek Ada Zıplaması - Kodlama deneyimleri Boyut 'u 'a ve CFrame.Position 'u 'a ayarlar.

    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, ardından Özellikler penceresinde aşağıdaki özellikleri yapılandırın, böylece tehlike görünmez ve oyuncular doğrudan geçebilir:

    • Saydamlığı 1. Bu, tehlikeyi görünmez hale getirir, böylece gerçek su tehlike olarak görünür.
    • Devre dışı bırak CanCollide .Bu, motorun diğer parçaların tehlikeyi kesintisiz geçebileceğini söyler, yani oyuncular tehlikeden düşebilir.
    • Sabitlenmiş etkinleştirin.Bu, motorun herhangi bir fizikle ilgili simülasyon nedeniyle tehlikenin konumunu asla değiştirmemesini sağlar, yani oyuncular tehlikeye dokunabilir ve konumunu etkilemeden dokunabilirler.
  5. Create a Kript İçeriği in ServerScriptService , then rename it to Hazmat Hizmeti .

  6. Varsayılan kodu aşağıdaki 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

    The HazardService 'nin çok benzerlikleri vardır CoinService .Ancak, bir para toplamak yerine, oyuncu bir tehlikeye dokunduğunda sağlığını 0'a ayarlar .

    Ekstra güvenlik için deneyiminizde tehlike nesnelerini değiştirme, ekleme veya kaldırma özgürlüğüne sahip olun.Tehlikeler Dosyası klasöründe saklı olduğu sürece, kod döngüsü olay işleyicisini tüm tehlikelere bağlar.

Oyuncu ömrüne bağlanma

Oyuncu ömrü, oyuncuların deneyiminize katılması, ayrılması veya yeniden doğması gibi oyuncuların etkileşime girdiği olayları temsil eder.Her bir büyük döngü olayı için mantığı uygun şekilde yürütmek için bu olaylara işlemcileri bağlamanız gerekir. CoinService skriptinde, kodu aşağıdaki gibi kopyalayıp yapıştırın:


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ü durdururdu, bu yüzden aşağıda ayrı bir işlemde 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
-- Oyuncu bağlanmadan önce eklenen herhangi bir oyuncuyu başlatın PlayerAdded etkinliğine
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 ömür döngü etkinlikleri sırasında para sayısını sıfırlamak için işlevler tanımlar:

  • Player.PlayerAdded oyuncu deneyime katıldığında ateş eder ve para sayısını 0 olarak ayarlar.
  • Player.CharacterAdded bir oyuncunun karakter modeli dünyaya eklenirken ateş eder. PlayerAdded ve oyuncu yeniden doğduğunda gerçekleşir.
  • Humanoid.Died bir oyuncu öldüğünde ateş eder ve para sayısını 0 olarak ayarlar.task.spawn() bunun işlenmesi için ayrı bir iş parçacığı oluşturur, böylece oyuncu hayat döngüsünün diğer yönleri yürütülebilir.
  • Player.PlayerRemoved bir oyuncu oyuncu durumunu temizlemek için deneyimi terk ettiğinde ateşlenir.
  • Bu kod, oyuncuların Players.PlayerAdded etkinliği yürütmeden önce para toplayabileceği ve daha sonra para sayılarının sıfıra sıfırlanması gereken bir potansiyel sorun içeriyor.Bu sorunu azaltmak için, kod planlaması veya oyuncunun karakterini başlatılana kadar dondurma gibi çözümler düşünün.Ancak, bu çözümler bu öğretici kapsamının ötesinde olan daha karmaşık senaryo konseptlerini içerir.

Oynatma testi

Oyuncu tehlikesinin planlandığı gibi çalışıp çalışmadığını görmenin zamanı geldi. Suya dokunduğunuzda, karakteriniz ölmeli ve paralarını kaybetmelidir. oyuntest 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 bazı para toplamak için hareket ettir, ardından suya atla.Eğer senaryolarınız doğru çalışıyorsa, karakteriniz ölür ve lider tablosundaki para sayısı 0 'ye sıfırlanır.