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:
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.
Tehlikeler klasöründe, bir blok parçasını yerleştirin ve adını Tehlike olarak değiştirin.
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.
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.
Create a Kript İçeriği in ServerScriptService , then rename it to Hazmat Hizmeti .
Varsayılan kodu aşağıdaki kodla değiştirin:
local Players = game:GetService("Players")local Workspace = game:GetService("Workspace")local hazardsFolder = Workspace.World.Hazardslocal hazards = hazardsFolder:GetChildren()local function onHazardTouched(otherPart)local character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.Health = 0endendendfor _, hazard in hazards dohazard.Touched:Connect(onHazardTouched)endKod açıklaması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:
Araç çubuğunda, Oyna düğmesine tıklayın. Studio oyun testi moduna girer.
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.