Memulai
Tutorial menengah

Poin Skor

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

Dalam tutorial sebelumnya, Anda telah membuat berbagai fitur pengalaman termasuk platform memudar dan lava mematikan. Tutorial ini menggabungkan semuanya menjadi pengalaman yang dapat dimainkan di mana pengguna melihat siapa yang dapat bertahan hidup paling lama. Setiap detik mereka bertahan hidup, satu poin akan ditambahkan ke skor mereka.

Siapkan

Pertama-tama, Anda perlu menyiapkan pemandangan untuk pengalaman Anda. Duplikat platform memudar yang Anda buat di tutorial sebelumnya dan biarkan pengguna bersaing untuk tetap berada di papan platform selama mungkin.

Anda juga bisa menggunakan lava mematikan untuk membunuh pengguna ketika mereka jatuh dari platform, atau cukup biarkan mereka jatuh menuju kehancuran mereka. Pastikan Anda menempatkan SpawnLocation di tempat di mana pengguna dapat melompat ke platform untuk mulai bermain.

Titik Spawn di atas grid platform memudar, di atas lantai lava

Poin Pemain

Roblox memiliki Leaderboard bawaan untuk menampilkan statistik pengguna. Ketika Anda mengatur poin pemain melalui papan peringkat, mereka akan muncul di sisi kanan layar dalam pengalaman.

Leaderboard dengan nama pengguna dan poin yang ditampilkan

Anda akan mempelajari lebih banyak cara kustomisasi untuk menampilkan informasi di tutorial selanjutnya, tetapi papan peringkat adalah cara termudah untuk membuat sistem skor yang terlihat di Roblox.

Sebaiknya letakkan skrip yang mengatur status pengalaman ke dalam ServerScriptService karena skrip tersebut akan secara otomatis dijalankan ketika pengalaman dimulai. Di ServerScriptService, buat skrip bernama SetupPoints.

Skrip SetupPoints di tempat di ServerScriptService di jendela Explorer

Dengarkan Pemain

Di Roblox, layanan adalah objek yang melakukan berbagai fungsi berguna. Layanan Players memiliki sebuah peristiwa bernama PlayerAdded yang dapat Anda gunakan untuk mengatur poin bagi setiap pengguna yang bergabung dengan pengalaman.

Anda dapat mengakses layanan dengan fungsi GetService di objek game. game adalah variabel yang dapat diakses dari mana saja yang berisi segala sesuatu dalam pengalaman Anda.

  1. Buat variabel untuk layanan Players menggunakan game:GetService("Players").

  2. Buat fungsi bernama onPlayerAdded dengan parameter untuk pemain yang masuk.

  3. Hubungkan fungsi onPlayerAdded ke peristiwa PlayerAdded.


    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Buat Folder Statistik

Agar poin pengguna ditampilkan di papan peringkat, yang perlu Anda lakukan hanyalah membuat Folder baru di objek Player mereka yang disebut "leaderstats" dan menempatkan poin mereka di sana. Objek baru dapat dibuat dari dalam skrip melalui fungsi Instance.new().

  1. Buat objek baru Folder menggunakan Instance.new("Folder"), menyimpan hasilnya dalam variabel baru bernama leaderstats.


    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. Atur properti Name dari leaderstats menjadi "leaderstats".

  3. Parent leaderstats ke player.


    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Buat Poin

Sistem papan peringkat membaca nilai apa pun di dalam folder leaderstats dan menampilkan apa pun yang ditemukannya.

Untuk menambahkan statistik yang akan melacak poin pemain, objek IntValue baru dapat diparentkan ke folder leaderstats. Nama objek nilai tersebut akan ditampilkan bersamaan dengan nilai saat ini.

  1. Gunakan variabel bernama points untuk membuat objek IntValue baru menggunakan Instance.new().
  2. Atur Name menjadi "Points".
  3. Atur Value menjadi 0; ini adalah apa yang awalnya akan ditampilkan papan peringkat untuk pemain.
  4. Parent objek points ke folder leaderstats.

local Players = game:GetService("Players")
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
end
Players.PlayerAdded:Connect(onPlayerAdded)

Uji pengalaman Anda dan seharusnya Anda melihat papan peringkat muncul di kanan atas dengan nama pengguna Anda dan skor poin di samping mereka.

Hitung Waktu

Setiap pengguna harus mendapatkan satu poin untuk setiap detik mereka hidup. Sebuah loop while dan fungsi task.wait() dapat digunakan untuk memperbarui nilai poin setiap detik.

  1. Di akhir skrip, buat loop while dengan true sebagai syarat.
  2. Di dalam loop, task.wait() selama 1 detik.

Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
end

Daftar Pemain

Untuk menjalankan kode untuk setiap pengguna di pengalaman, Anda perlu mengiterasi melalui array pengguna yang dikembalikan oleh fungsi GetPlayers.

Array adalah daftar item yang disimpan secara berurutan. Setiap item dapat diakses melalui posisi indeks-nya, dimulai dari 1. Anda dapat mendapatkan panjang dari sebuah array dengan menambahkannya dengan #.

  1. Simpan hasil dari Players:GetPlayers() dalam variabel playerList.
  2. Buat sebuah loop for dengan nilai awal 1 dan nilai akhir #playerList, sehingga Anda mendapatkan satu iterasi dari loop per pemain.

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- Tambahkan logika Anda di sini untuk setiap pemain dalam playerList
end
end

Beri Poin

Untuk memberikan satu poin kepada setiap pengguna dalam loop for, Anda perlu mengambil pengguna dari array dan menambahkan 1 ke objek Points yang tersimpan dalam folder leaderstats mereka.

Objek yang disimpan dalam array diakses menggunakan kurung siku - misalnya, item pertama dalam array playerList dapat diakses dengan playerList[1]. Jika Anda menulis playerList[currentPlayer] di dalam loop for, Anda dapat bergerak melalui setiap pengguna dalam daftar dengan setiap iterasi loop.

  1. Simpan pengguna di playerList[currentPlayer] dalam variabel bernama player.
  2. Simpan objek Points pengguna dalam variabel bernama points.
  3. Atur properti Value dari points menjadi points.Value + 1.

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
local points = player.leaderstats.Points
points.Value += 1
end
end

Uji pengalaman Anda dan Anda seharusnya menemukan bahwa papan peringkat menunjukkan skor pemain Anda meningkat 1 setiap detik.

Dengarkan Karakter

Tujuan dari pengalaman ini adalah untuk melihat siapa yang dapat bertahan hidup paling lama, jadi pengguna yang mati perlu memiliki poin mereka disetel ke 0.

Anda perlu mendapatkan model Character untuk pengguna untuk mendeteksi kapan mereka mati. Model ini hanya ditambahkan ke pengalaman setelah objek Player dimuat dan Anda dapat menggunakan peristiwa CharacterAdded untuk mendengarkan kapan karakter siap digunakan. Buat fungsi bernama onCharacterAdded dengan dua parameter: satu untuk karakter, satu untuk pemain.


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")

Meskipun Anda menyertakan pengguna dalam parameter fungsi onCharacterAdded, peristiwa CharacterAdded hanya mengembalikan karakter, bukan pengguna terkait. Untuk meneruskan objek player juga, gunakan fungsi anonim untuk koneksi peristiwa tersebut.


local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Reset Poin

Ketika pengguna mati, Humanoid mereka secara otomatis memicu peristiwa Died. Anda dapat menggunakan peristiwa ini untuk mengetahui kapan harus mereset poin mereka.

Humanoid ditemukan di dalam model Character, tetapi isi dari model itu hanya dirakit saat pengguna muncul. Untuk membuat kode Anda aman menunggu objek Humanoid dimuat, gunakan fungsi WaitForChild(). Anda dapat memanggilnya pada objek induk mana pun, dengan menambahkan nama string dari anak yang Anda tunggu. Buat variabel untuk menunggu Humanoid menggunakan character:WaitForChild("Humanoid").


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
end

Fungsi yang perlu Anda hubungkan ke peristiwa Died sangat pendek dan hanya akan dibutuhkan di sini, jadi Anda dapat menggunakan fungsi anonim lagi.

  1. Hubungkan fungsi anonim baru ke peristiwa Died Humanoid.
  2. Dalam fungsi anonim, buat variabel bernama points untuk objek Points pemain.
  3. Atur properti Value dari points menjadi 0.

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
end)
end

Uji ini dan Anda akan melihat skor pengguna direset ketika mereka mati.

Periksa Pemain

Jika pengguna terus mendapatkan poin bahkan saat mati, itu sama sekali tidak sesuai dengan semangat pengalaman ini, jadi kode perlu memeriksa apakah pengguna hidup sebelum memberi poin.

Anda perlu memulai dengan mendefinisikan atribut dalam fungsi onPlayerAdded yang dapat digunakan untuk memeriksa apakah pengguna hidup. Pada titik ini, pengguna belum hidup dan muncul, karena model karakter mereka masih perlu ditambahkan.

Atribut memungkinkan Anda menyesuaikan objek di Roblox dengan data Anda sendiri. Sebuah atribut terdiri dari nama dan nilai. Anda dapat membuat satu pada objek mana pun menggunakan fungsi SetAttribute. Panggil SetAttribute pada player untuk membuat atribut baru bernama "IsAlive" dengan nilai false.


local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Setelah model karakter pengguna respawn, nilai dari IsAlive perlu diubah menjadi true agar pengguna dapat mulai mendapatkan poin lagi.

  1. Di onCharacterAdded, atur atribut IsAlive dari player menjadi true.
  2. Di onCharacterDied, atur atribut IsAlive dari player menjadi false.

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end

Akhirnya, IsAlive harus diperiksa sebelum setiap poin diberikan dalam loop while di akhir skrip. Fungsi GetAttribute mengambil nama atribut dan mengembalikan nilainya. Di dalam loop while, bungkus kode untuk memberikan poin dalam pernyataan if dengan syarat player:GetAttribute("IsAlive").


while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end

Uji pengalaman Anda sekarang dan Anda seharusnya menemukan pengguna mendapatkan poin setiap detik mereka hidup, dan tetap di 0 saat tidak hidup. Ajak teman-teman Anda bermain bersamamu dan lihat siapa yang bisa mendapatkan skor tertinggi.

Ini baru permulaan: Anda dapat terus meningkatkan pengalaman Anda bagi pengguna. Berikut adalah beberapa tips:

  • Tempatkan kode untuk semua platform ke dalam satu skrip, membuatnya jauh lebih mudah untuk diperbarui.
  • Buat area lobi di mana pengguna menunggu untuk dipindahkan ke area pengalaman, sehingga pengguna dapat memulai secara bersamaan.
  • Umumkan pemenang dari setiap putaran.

Kode Akhir


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for i = 1, #playerList do
local player = playerList[i]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.