Objek bahaya mengurangi kesehatan pemain saat mereka menyentuhnya.Sebagai titik awal yang sederhana, bagian tutorial ini mengajarkan Anda cara membuat satu bagian tak terlihat besar pada tingkat yang sama dengan air dalam pengalaman Anda, sehingga jatuh ke bahaya mengubah kesehatan pemain menjadi nol dan memunculkan mereka kembali ke awal pengalaman.
Buat bahaya air dasar
Untuk membuat bahaya air dasar:
Di jendela Explorer , tambahkan folder baru ke folder Dunia , lalu ganti namanya menjadi Bahaya .Pastikan nama diucapkan dengan benar dengan pengejaan yang benar, jika tidak kode tidak akan berfungsi.
Di folder Bahaya , masukkan bagian blok dan ganti namanya menjadi Bahaya .
Pindahkan dan skala bagian untuk menutupi saluran air di sekitar pulau dan platform.Sebagai contoh, pengalaman contoh Lompatan Pulau - Pemrograman mengatur Ukuran ke 825, 1, 576 dan CFrame.Position ke 174, -6.5, 38.
Pilih bagian, lalu di jendela Properti , konfigurasi properti berikut sehingga bahaya tidak terlihat, dan pemain dapat melewatinya dengan benar:
- Tetapkan Transparansi ke . Ini membuat bahaya tidak terlihat, sehingga air aktual tampaknya menjadi bahaya.
- Nonaktifkan CanCollide .Ini memberi tahu mesin bahwa bagian lain dapat melewati bahaya tanpa gangguan, artinya pemain dapat jatuh melalui bahaya.
- Aktifkan Terikat .Ini memberi tahu mesin untuk tidak pernah mengubah posisi bahaya karena simulasi fisika terkait, artinya pemain dapat menyentuh bahaya tanpa memengaruhi lokasinya.
Buat Skrip di ServerScriptService , lalu ganti namanya menjadi Layanan Bahaya .
Ganti kode default dengan kode berikut:
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)endPenjelasan kodeThe HazardService memiliki banyak kesamaan dengan CoinService .Namun, alih-alih mengumpulkan koin, pemain memiliki set kesehatan mereka menjadi 0 ketika mereka menyentuh bahaya.
Jangan ragu untuk memodifikasi, tambah, atau menghapus objek bahaya di pengalaman Anda untuk menciptakan hambatan unik.Selama mereka terkandung dalam folder Bahaya , loop kode menghubungkan pengelola acara ke semua bahaya Anda.
Hubungkan ke siklus kehidupan pemain
Siklus kehidupan pemain mewakili peristiwa yang terjadi ketika pemain berinteraksi dalam pengalaman Anda, seperti bergabung, pergi, atau respawn.Anda perlu menghubungkan penangan ke peristiwa ini untuk mengeksekusi logik yang tepat untuk setiap peristiwa siklus utama.Di dalam skrip CoinService , salin dan tempel kode berikut di bagian bawah skrip:
local function onPlayerAdded(player)
-- Atur ulang koin pemain ke 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild akan menghentikan loop pemain, jadi di bawah harus dilakukan di thread terpisah
task.spawn(function()
-- Saat seorang pemain meninggal
character:WaitForChild("Humanoid").Died:Connect(function()
-- Atur ulang koin pemain ke 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inisialisasi pemain mana pun yang ditambahkan sebelum terhubung ke acara 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 mendefinisikan fungsi untuk mengatur ulang hitungan koin selama peristiwa masa hidup yang sesuai:
- Player.PlayerAdded terbakar saat pemain bergabung dengan pengalaman, dan atur jumlah koin menjadi 0.
- Player.CharacterAdded terbakar saat model karakter pemain ditambahkan ke dunia. Terjadi setelah PlayerAdded dan setiap kali pemain respawns.
- Humanoid.Died terbakar saat pemain meninggal, dan atur jumlah koin menjadi 0 . task.spawn() membuat thread terpisah untuk menangani ini, sehingga aspek lain dari siklus kehidupan pemain dapat dieksekusi.
- Player.PlayerRemoved terbakar saat pemain meninggalkan pengalaman untuk membersihkan status pemain.
- Kode ini berisi masalah potensial di mana pemain dapat mengumpulkan koin sebelum peristiwa Players.PlayerAdded dijalankan dan kemudian memiliki hitungan koin mereka direset menjadi nol.Untuk mengatasi masalah ini, pertimbangkan solusi seperti penjadwalan kode atau membekukan karakter pemain sampai initialisasi selesai.Namun, solusi ini melibatkan konsep skrip yang lebih kompleks yang berada di luar cakupan tutorial ini.
Pengujian Permainan
Sudah waktunya untuk melihat apakah bahaya pemain bekerja seperti yang diinginkan. Saat Anda menyentuh air, karakter Anda harus mati dan kehilangan koin mereka. Untuk menguji gameAnda:
Di bilah alat, klik tombol Mainkan . Studio memasuki mode pengujian.
Pindahkan karakter Anda untuk mengumpulkan beberapa koin, lalu lompat ke dalam air.Jika skrip Anda berfungsi dengan benar, karakter Anda mati, dan hitungan koin di papan peringkat diatur ulang menjadi 0.