คะแนน

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ในบทเรียนก่อนหน้านี้ คุณได้สร้างฟีเจอร์เกมหลากหลายรวมถึง แพลตฟอร์มที่จางหาย และ ลาวาที่อันตราย บทเรียนนี้จะเชื่อมโยงสิ่งเหล่านี้เข้าด้วยกันเป็นเกมที่เล่นได้ซึ่งผู้ใช้จะเห็นว่าใครสามารถอยู่รอดได้นานที่สุด ทุกๆ วินาทีที่พวกเขายังมีชีวิตอยู่ คะแนนจะถูกเพิ่มเข้าไปในคะแนนของพวกเขา

ตั้งค่า

ก่อนอื่น คุณจะต้องตั้งฉากสำหรับเกมของคุณ ทำการคัดลอก แพลตฟอร์มที่จางหาย ที่คุณสร้างในบทเรียนก่อนหน้าและให้ผู้ใช้แข่งขันกันเพื่ออยู่บนแพลตฟอร์มให้นานที่สุดเท่าที่จะทำได้

คุณยังสามารถใช้ ลาวาที่อันตราย เพื่อฆ่าผู้ใช้เมื่อพวกเขาตกจากแพลตฟอร์ม หรือปล่อยให้พวกเขาตกลงไปสู่ความหายนะ ตรวจสอบให้แน่ใจว่าคุณวาง SpawnLocation ไว้ในที่ที่ผู้ใช้สามารถกระโดดขึ้นไปบนแพลตฟอร์มเพื่อเริ่มเล่น

จุดเกิดเหนือกริดของแพลตฟอร์มที่จางหายเหนือพื้นลาวา

คะแนนผู้เล่น

Roblox มี Leaderboard ที่สร้างขึ้นมาเพื่อแสดงสถิติของผู้ใช้ เมื่อคุณตั้งค่าคะแนนผู้เล่นผ่าน leaderboard คะแนนจะปรากฏที่ด้านขวาของหน้าจอในเกม

Leaderboard ที่แสดงชื่อผู้ใช้และคะแนน

คุณจะได้เรียนรู้วิธีการแสดงข้อมูลที่ปรับแต่งได้มากขึ้นในบทเรียนถัดไป แต่ leaderboard เป็นวิธีที่ง่ายที่สุดในการสร้างระบบคะแนนที่มองเห็นได้ใน Roblox

ดีที่สุดคือการวางสคริปต์ที่ตั้งค่ารัฐของเกมไว้ใน ServerScriptService เพราะมันจะทำงานโดยอัตโนมัติเมื่อเกมเริ่ม ใน ServerScriptService ให้สร้างสคริปต์ชื่อ SetupPoints

สคริปต์ SetupPoints ในตำแหน่งใน ServerScriptService ในหน้าต่าง Explorer

ฟังผู้เล่น

ใน Roblox service คือวัตถุที่ทำหน้าที่หลากหลายฟังก์ชันที่มีประโยชน์ บริการ Players มีเหตุการณ์ที่เรียกว่า PlayerAdded ที่คุณสามารถใช้เพื่อจัดตั้งคะแนนสำหรับผู้ใช้แต่ละคนที่เข้าร่วมเกม

คุณสามารถเข้าถึงบริการได้ด้วยฟังก์ชัน GetService ในวัตถุ game game เป็นตัวแปรที่เข้าถึงได้จากทุกที่ซึ่งมีทุกอย่างในเกมของคุณ

  1. สร้างตัวแปรสำหรับบริการ Players โดยใช้ game:GetService("Players")

  2. สร้างฟังก์ชันชื่อ onPlayerAdded โดยมีพารามิเตอร์สำหรับผู้เล่นที่เข้ามา

  3. เชื่อมต่อฟังก์ชัน onPlayerAdded กับเหตุการณ์ PlayerAdded

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

สร้างโฟลเดอร์สถิติ

เพื่อให้คะแนนของผู้ใช้แสดงใน leaderboard สิ่งที่คุณต้องทำคือสร้าง Folder ใหม่ในวัตถุ Player ของพวกเขาชื่อว่า "leaderstats" และใส่คะแนนของพวกเขาไว้ที่นั่น วัตถุใหม่สามารถสร้างจากภายในสคริปต์ผ่านฟังก์ชัน Instance.new()

  1. สร้างวัตถุ Folder ใหม่โดยใช้ Instance.new("Folder") และเก็บผลลัพธ์ในตัวแปรใหม่ชื่อ leaderstats

    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. ตั้งค่า Property ชื่อของ leaderstats เป็น "leaderstats"

  3. ตั้งค่า leaderstats เป็นพ่อแม่ของ 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)

สร้างคะแนน

ระบบ leaderboard จะอ่านค่าทุกค่าในโฟลเดอร์ leaderstats และแสดงสิ่งที่พบ

เพื่อเพิ่มสถิติที่จะติดตามคะแนนของผู้เล่น วัตถุ IntValue ใหม่สามารถเป็นพ่อแม่ของโฟลเดอร์ leaderstats ชื่อของวัตถุค่าจะถูกแสดงเคียงข้างกับค่าปัจจุบันของมัน

  1. ใช้ตัวแปรชื่อ points เพื่อสร้างวัตถุ IntValue ใหม่โดยใช้ Instance.new()
  2. ตั้งค่า Name เป็น "Points"
  3. ตั้งค่า Value เป็น 0; นี่คือสิ่งที่ leaderboard จะแสดงในตอนแรกสำหรับผู้เล่น
  4. ตั้งค่า points เป็นพ่อแม่ของโฟลเดอร์ 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)

ทดสอบเกมของคุณและคุณควรเห็น leaderboard ปรากฏที่มุมขวาบนพร้อมกับชื่อของผู้ใช้และคะแนนข้างๆ พวกเขา

นับเวลา

ผู้ใช้แต่ละคนควรได้รับคะแนนสำหรับทุกๆ วินาทีที่พวกเขายังมีชีวิตอยู่ สามารถใช้ while loop และฟังก์ชัน task.wait() เพื่ออัปเดตค่าของคะแนนทุกๆ วินาที

  1. ที่ส่วนท้ายของสคริปต์ สร้าง while loop โดยใช้ true เป็นเงื่อนไข
  2. ใน loop ให้ task.wait() เป็นเวลา 1 วินาที
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
end

รายชื่อผู้เล่น

เพื่อรันโค้ดสำหรับผู้ใช้ทุกคนในเกม คุณต้องวนซ้ำผ่าน array ของผู้ใช้ที่ส่งกลับโดยฟังก์ชัน GetPlayers

อาเรย์คือรายการของรายการที่จัดเก็บตามลำดับ แต่ละรายการสามารถเข้าถึงได้โดยตำแหน่ง index โดยเริ่มจาก 1 คุณสามารถรับความยาวของอาเรย์ได้โดยการเติมหน้าด้วย #

  1. เก็บผลลัพธ์ของ Players:GetPlayers() ในตัวแปร playerList
  2. สร้าง for loop โดยมีค่าตั้งต้นเป็น 1 และค่าจบเป็น #playerList เพื่อให้คุณได้การวนซ้ำหนึ่งครั้งต่อผู้เล่นแต่ละคน
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- เพิ่มตรรกะของคุณที่นี่สำหรับผู้เล่นแต่ละคนใน playerList
end
end

มอบคะแนน

เพื่อมอบคะแนนให้กับผู้ใช้แต่ละคนใน for loop คุณจะต้องดึงผู้ใช้จากอาเรย์และเพิ่ม 1 ให้กับวัตถุ Points ที่เก็บอยู่ในโฟลเดอร์ leaderstats ของพวกเขา

วัตถุที่เก็บอยู่ในอาเรย์จะถูกเข้าถึงโดยใช้ วงเล็บสี่เหลี่ยม - ตัวอย่างเช่น รายการแรกในอาเรย์ playerList สามารถเข้าถึงได้ด้วย playerList[1] หากคุณเขียน playerList[currentPlayer] ใน for loop คุณสามารถเคลื่อนที่ผ่านผู้ใช้แต่ละคนในรายการได้ในทุกการวนซ้ำของ loop

  1. เก็บผู้ใช้ที่ playerList[currentPlayer] ในตัวแปรชื่อ player
  2. เก็บวัตถุ Points ของผู้ใช้ในตัวแปรชื่อ points
  3. ตั้งค่า Value ของ points เป็น 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

ทดสอบเกมของคุณและคุณควรพบว่า leaderboard แสดงคะแนนของผู้เล่นของคุณเพิ่มขึ้น 1 ทุกๆ วินาที

ฟังตัวละคร

เป้าหมายของเกมคือการดูว่าใครสามารถอยู่รอดได้นานที่สุด ดังนั้นผู้ใช้ที่ตายจะต้องมีคะแนนของพวกเขากลับไปเป็น 0

คุณจะต้องดึงโมเดล Character สำหรับผู้ใช้เพื่อให้ตรวจจับได้เมื่อพวกเขาตาย โมเดลนี้จะถูกเพิ่มเข้าไปในเกม หลังจาก วัตถุ Player ถูกโหลดและคุณสามารถใช้เหตุการณ์ CharacterAdded เพื่อฟังเมื่อโมเดลตัวละครพร้อมใช้งาน สร้างฟังก์ชันชื่อ onCharacterAdded โดยมีพารามิเตอร์สองตัว: หนึ่งสำหรับตัวละคร หนึ่งสำหรับผู้เล่น

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

แม้ว่าคุณจะรวมผู้ใช้ในพารามิเตอร์ของฟังก์ชัน onCharacterAdded แต่เหตุการณ์ CharacterAdded จะส่งคืนเฉพาะตัวละครเท่านั้น ไม่ใช่ผู้ใช้ที่เกี่ยวข้อง เพื่อส่งผ่านวัตถุ player ด้วย คุณสามารถใช้ ฟังก์ชันนิรนาม สำหรับการเชื่อมต่อเหตุการณ์

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

รีเซ็ตคะแนน

เมื่อผู้ใช้ตาย Humanoid จะทำการเรียกใช้งาน Died โดยอัตโนมัติ คุณสามารถใช้เหตุการณ์นี้เพื่อตรวจสอบว่าเมื่อใดควรรีเซ็ตคะแนนของพวกเขา

Humanoid จะถูกพบภายในโมเดล Character แต่เนื้อหาของโมเดลนั้นจะถูกประกอบขึ้นเมื่อผู้ใช้เกิดขึ้น เพื่อให้โค้ดของคุณรออย่างปลอดภัยสำหรับวัตถุ Humanoid ให้ใช้ฟังก์ชัน WaitForChild() คุณสามารถเรียกใช้มันบนวัตถุพ่อแม่ใดๆ โดยส่งชื่อสตริงของลูกที่คุณรออยู่ สร้างตัวแปรเพื่อรอ Humanoid โดยใช้ character:WaitForChild("Humanoid")

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

ฟังก์ชันที่คุณต้องเชื่อมต่อกับเหตุการณ์ Died นั้นสั้นมากและจะต้องใช้ที่นี่เท่านั้น ดังนั้นคุณสามารถใช้ฟังก์ชันนิรนามอีกครั้ง

  1. เชื่อมต่อฟังก์ชันนิรนามใหม่กับเหตุการณ์ Died ของ Humanoid
  2. ในฟังก์ชันนิรนาม สร้างตัวแปรชื่อ points สำหรับวัตถุ Points ของผู้เล่น
  3. ตั้งค่า Value ของ points เป็น 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

ทดสอบสิ่งนี้และคุณจะเห็นคะแนนของผู้ใช้รีเซ็ตเมื่อพวกเขาตาย

ตรวจสอบผู้เล่น

หากผู้ใช้ยังคงได้รับคะแนนแม้ในขณะที่ตาย มันก็ไม่อยู่ในจิตวิญญาณของเกม ดังนั้นโค้ดจึงต้องตรวจสอบว่าผู้ใช้ยังมีชีวิตอยู่ก่อนที่จะมอบคะแนน

คุณต้องเริ่มต้นโดยการกำหนด attribute ในฟังก์ชัน onPlayerAdded ซึ่งสามารถใช้เพื่อตรวจสอบว่าผู้ใช้ยังมีชีวิตอยู่หรือไม่ ในขณะนี้ผู้ใช้ยังไม่อยู่มีชีวิตและเกิดขึ้น เนื่องจากโมเดลตัวละครของพวกเขายังต้องถูกเพิ่ม

Attributes ช่วยให้คุณปรับแต่งวัตถุใน Roblox ด้วยข้อมูลของคุณเอง Attribute ประกอบด้วยชื่อและค่า คุณสามารถสร้างหนึ่งในวัตถุใดๆ โดยใช้ฟังก์ชัน SetAttribute เรียก SetAttribute บน player เพื่อสร้าง attribute ใหม่ชื่อว่า "IsAlive" โดยมีค่าเป็น 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

เมื่อโมเดลตัวละครของผู้ใช้เกิดใหม่ ค่า IsAlive จะต้องถูกเปลี่ยนเป็น true เพื่อให้ผู้ใช้สามารถเริ่มได้รับคะแนนอีกครั้ง

  1. ใน onCharacterAdded ตั้งค่า attribute IsAlive ของ player เป็น true
  2. ใน onCharacterDied ตั้งค่า attribute IsAlive ของ player เป็น 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

สุดท้าย IsAlive ควรจะ ตรวจสอบ ก่อนที่จะมอบคะแนนใน while loop ที่ส่วนท้ายของสคริปต์ ฟังก์ชัน GetAttribute จะรับชื่อของ attribute และส่งคืนค่า ใน while loop ให้ห่อหุ้มโค้ดเพื่อมอบคะแนนใน if statement โดยมีเงื่อนไขว่า 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

ทดสอบเกมของคุณตอนนี้และคุณควรพบว่าผู้ใช้ได้รับคะแนนทุกๆ วินาทีที่พวกเขายังมีชีวิตอยู่ และอยู่ที่ 0 เมื่อไม่อยู่ มีเพื่อนของคุณเล่นกับคุณและดูว่าใครสามารถทำคะแนนสูงสุดได้

นี่เป็นเพียงจุดเริ่มต้น: คุณสามารถปรับปรุงเกมของคุณสำหรับผู้ใช้ต่อไป นี่คือเคล็ดลับบางประการ:

  • วางโค้ดสำหรับแพลตฟอร์มทั้งหมดลงในสคริปต์เดียว ทำให้การอัปเดตง่ายขึ้นมาก
  • สร้างพื้นที่ล็อบบี้ที่ผู้ใช้รอเพื่อถูกส่งไปยังพื้นที่เกม ทำให้ผู้ใช้เริ่มพร้อมกัน
  • ประกาศผู้ชนะของแต่ละรอบ

โค้ดสุดท้าย

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, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ