Buat bahaya pemain

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.


Saat ini, pemain dapat jatuh dari platform mana pun tanpa konsekuensi. Bagian ini membimbing Anda untuk membuat bahaya besar yang tidak terlihat pada ketinggian yang sama dengan air di permainan Anda. Ketika seorang pemain jatuh ke dalam bahaya, kesehatan mereka akan berkurang menjadi nol dan mereka akan respawn di awal permainan.

Buat bahaya air dasar

Buat bahaya air dasar

Di Workspace > World, buat folder baru bernama Hazards.
Di dalam folder Hazards, buat sebuah bagian blok bernama Hazard dengan Ukuran 825, 1, 576 dan CFrame.Position 174, -6.5, 38 sehingga bagian tersebut menutupi air di sekitar pulau dan platform.
Setel Transparansi ke 1 sehingga bagian tersebut tidak terlihat dan air yang sebenarnya tampak sebagai bahaya, nonaktifkan CanCollide sehingga pemain jatuh melalui bagian tersebut ke dalam air, dan aktifkan Anchored sehingga fisika tidak memindahkannya.

Deteksi ketika pemain menyentuh bahaya

Bahaya tidak melakukan apa pun sampai Anda menulis sebuah skrip yang mendengarkan Touched dan menurunkan kesehatan pemain menjadi nol.

Buat HazardService

Di ServerScriptService, buat sebuah Skrip bernama HazardService dengan kode berikut:
```lua
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 memiliki banyak kesamaan dengan CoinService. Namun, alih-alih mengumpulkan koin, pemain memiliki kesehatan di atur menjadi 0 ketika mereka menyentuh bahaya.

Silakan modifikasi, tambahkan, atau hapus objek bahaya di permainan Anda untuk menciptakan rintangan yang unik. Selama mereka terletak di dalam folder Hazards, loop kode menghubungkan pengendali peristiwa ke semua bahaya Anda.

Hubungkan dengan siklus hidup pemain

Siklus hidup pemain mewakili peristiwa yang terjadi ketika pemain berinteraksi dalam permainan Anda, seperti bergabung, keluar, atau respawn. Anda perlu menghubungkan pengendali ke peristiwa ini untuk mengeksekusi logika untuk setiap peristiwa siklus hidup utama.

Tambahkan pengendali siklus hidup ke CoinService

Di ServerScriptService, tambahkan kode berikut ke bagian bawah Skrip CoinService yang sudah ada (jangan mengganti kode yang sudah ada — tambahkan ini setelahnya):
```lua
local function onPlayerAdded(player)
-- Reset koin pemain menjadi 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild akan menghentikan loop pemain, jadi di bawah ini harus dilakukan di thread terpisah
task.spawn(function()
-- Ketika seorang pemain mati
character:WaitForChild("Humanoid").Died:Connect(function()
-- Reset koin pemain menjadi 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inisialisasi pemain yang ditambahkan sebelum menghubungkan ke peristiwa PlayerAdded
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)
```

Kode ini mendefinisikan fungsi untuk mengatur ulang jumlah koin selama peristiwa siklus hidup yang tepat:

  • Players.PlayerAdded dipicu ketika seorang pemain bergabung dengan permainan, dan mengatur jumlah koin ke 0.
  • Player.CharacterAdded dipicu ketika model karakter seorang pemain ditambahkan ke dunia. Ini terjadi setelah PlayerAdded dan kapan pun pemain respawn.
  • Humanoid.Died dipicu ketika seorang pemain mati, dan mengatur jumlah koin menjadi 0. task.spawn() membuat thread terpisah untuk menangani ini, sehingga aspek lain dari siklus hidup pemain dapat dieksekusi.
  • Player.PlayerRemoved dipicu ketika seorang pemain meninggalkan permainan untuk membersihkan status pemain.
  • Kode ini mengandung masalah potensial di mana pemain dapat mengumpulkan koin sebelum peristiwa Players.PlayerAdded dieksekusi dan kemudian jumlah koin mereka direset menjadi nol. Untuk mengurangi masalah ini, pertimbangkan solusi seperti penjadwalan kode atau membekukan karakter pemain hingga inisialisasi selesai. Namun, solusi ini melibatkan konsep skrip yang lebih kompleks yang berada di luar cakupan tutorial ini.

Uji permainan

Pilih Uji dari dropdown dan klik Mainkan. Kumpulkan beberapa koin, lalu lompat ke dalam air. Karakter Anda harus mati dan respawn di awal, dengan jumlah koin mereka direset menjadi 0.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.