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:
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.
Tehlike klasındaki blok parçasını yerleştir ve tehlike adını ver.
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>
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.
SunucuScriptServisi içinde bir Script oluşturun, sonra HazardService olarak yeniden adlandırın.
Aşağıdaki kodu varsayılan 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ı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:
Menü çubuğunda Oyna düğmesine tıklayın. Studio oyun testi moduna girer.
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 .