Buat Bahaya Pemain

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


Objek bahaya menurunkan kesehatan pemain saat mereka menyentuhnya. Sebagai poin awal sederhana, bagian ini dari tutorial menunjukkan cara membuat satu bagian besar yang tak terlihat di tingkatan yang sama dengan air dalam pengalaman Anda, sehingga jatuh ke dalam bahaya mengubah kesehatan pemain menjadi nol dan respawn mereka kembali ke awal pengalaman.

Menciptakan Bahaya Air Dasar

Untuk menciptakan bahaya air dasar:

  1. Dalam jendela Explorer , tambahkan sub-folder baru ke sub-folder Dunia , lalu ganti namanya menjadi Hazards . Pastikan bahwa nama itu diucapkan dengan benar dengan kasus yang benar, jika tidak kode tersebut tidak akan berfungsi.

  2. Di Folder Hazards , seret bagian blok dan ganti nama itu Hazard .

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. Pindahkan dan skalakan bagian untuk menutupi garis air di sekitar pulau dan platform. Misalnya, pengalaman Island Jump - Scripting menetapkan Ukuran ke 825, 1, 576 dan 2> CFrame.Position2> ke 5> 174, -6.5, 385>.

    A far out view of all of the cylinder sea stacks and the island. A large block part covers the water where a player could land if they fell from a sea stack.
  4. Pilih bagian, lalu di jendela Properties , konfigurasikan propperti berikut sehingga bahaya tidak terlihat, dan pemain dapat melewati dengan benar melalui itu:

    • Tetapkan Transparansi ke 1 . Ini membuat bahaya tidak terlihat, sehingga air yang sebenarnya tampaknya menjadi bahaya.
    • Nonaktifkan BisaSalinBentrokan . Ini memberi tahu mesin bahwa bagian lain dapat melewati bahaya tanpa tersentuh, yang berarti pemain dapat jatuh melalui bahaya.
    • Aktifkan Tertancam . Ini memberi tahu mesin untuk tidak pernah mengubah lokasi bahaya karena simulasi fisik apa pun, yang berarti pemain dapat menyentuh bahaya tanpa menyentuh lokasinya.
  5. Buat Skrip di ServerScriptService , lalu ganti namanya menjadi HazardService .

  6. Ganti kode default dengan kode berikut:


    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

    The HazardService memiliki banyak kesamaan dengan CoinService . Namun, alih-alih mengumpulkan koin, pemain memiliki set kesehatan mereka menjadi 0 saat mereka menyentuh bahaya.

    Jangan ragu untuk mengubah, tambah, atau menghapus objek bahaya di pengalaman Anda untuk menciptakan rintangan unik. Asalkan mereka berada di Folder Bahaya , kode loop menghubungkan pemroses acara ke semua rintangan Anda.

Terhubung ke Player Lifecycle

Lifecycle pemain mewakili acara yang terjadi ketika pemain berinteraksi dalam pengalaman Anda, seperti bergabung, meninggalkan, atau respawning. Anda perlu menghubungkan handler ke acara ini untuk mengeksekusi logika yang sesuai untuk setiap acara hidup besar. Dalam CoinService script, salinan dan pasta kode berikut di bagian bawah script:


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 ini harus dilakukan dalam thread yang berpisah
task.spawn(function()
-- Ketika seorang pemain mati
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 mengikuti 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 menghitung ulang hitungan koin selama acara hidup yang sesuai:

  • Player.PlayerAdded menembakkan ketika seorang pemain bergabung dengan pengalaman, dan menetapkan jumlah koin ke 0 .
  • Player.CharacterAdded menyala ketika model karakter pemain ditambahkan ke dunia. Ini terjadi setelah PlayerAdded dan setiap kali pemain respawn.
  • Humanoid.Died menembak ketika seorang pemain mati, dan menetapkan jumlah koin menjadi 0 . task.spawn() menciptakan thread terpisah untuk menangani ini, sehingga aspek lain dari kehidupan siklus pemain dapat dieksekusi.
  • Player.PlayerRemoved menembak jika seorang pemain meninggalkan pengalaman untuk membersihkan status pemain.
  • Kode ini mengandung masalah potensial di mana pemain dapat mengumpulkan koin sebelum acara Players.PlayerAdded berjalan dan kemudian menetapkan kembali jumlah koin mereka menjadi nol. Untuk mengatasi masalah ini, pertimbangkan solusi seperti pembuatan jadwal kode atau membekukan karakter pemain sampai inisialisasi selesai. Namun, solusi ini melibatkan kon

Ujian

Saatnya untuk melihat apakah bahaya pemain bekerja seperti yang diharapkan. Saat Anda menyentuh air, karakter Anda harus mati dan kehilangan koin mereka. Untuk menguji gameAnda:

  1. Di bilah menu, klik tombol Bermain . Studio memasuki mode pengujian.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Pindahkan karakter Anda untuk mengumpulkan beberapa koin, lalu lompat ke dalam air. Jika skrip Anda bekerja dengan benar, karakter Anda mati, dan jumlah koin di papan peringkat diatur ulang menjadi 0 .