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 dasarDi 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 HazardServiceDi ServerScriptService, buat sebuah Skrip bernama HazardService dengan kode berikut:```lualocal 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)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 CoinServiceDi ServerScriptService, tambahkan kode berikut ke bagian bawah Skrip CoinService yang sudah ada (jangan mengganti kode yang sudah ada — tambahkan ini setelahnya):```lualocal function onPlayerAdded(player)-- Reset koin pemain menjadi 0updatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild akan menghentikan loop pemain, jadi di bawah ini harus dilakukan di thread terpisahtask.spawn(function()-- Ketika seorang pemain maticharacter:WaitForChild("Humanoid").Died:Connect(function()-- Reset koin pemain menjadi 0updatePlayerCoins(player, function(_)return 0end)end)end)end)end-- Inisialisasi pemain yang ditambahkan sebelum menghubungkan ke peristiwa PlayerAddedfor _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.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.