ในการกวดวิชาก่อนหน้านี้ คุณสร้างคุณสมบัติที่หลากหลายรวมถึง แพลตฟอร์มที่ซื้อมาใหม่ และ ลาวาที่เสี่ยงอันตราย นี้ การกวดวิชานี้ผูกคุณเข้าด้วยกันเป็นปร
การตั้งค่า
ก่อนอื่น, คุณจะต้องตั้งฉากสำหรับประสบการณ์ของคุณ ดับเบิลผู้เล่นที่ทำในการกวดวิชาก่อนหน้านี้และให้ผู้ใช้แข่งขันกันเพื่ออยู่บนกระดานของแพลตฟอร์มนานที่สุด
คุณยังสามารถใช้ ลาวาที่เสี่ยงต่อการฆ่าผู้ใช้ เพื่อฆ่าผู้ใช้เมื่อพวกเขาตกออกจากแพลตฟอร์มหรือเพียงแค่ปล่อยให้พวกเขาตกลงไปสู่ความตาย ให้แน่ใจว่าคุณวาง SpawnLocation ที่ใด
แต้มผู้เล่น
Roblox มี Leaderboard ติดตั้งอยู่เพื่อแสดงสถิติของผู้ใช้ เมื่อคุณตั้งค่าคะแนนผู้เล่นผ่าน ตารางอันดับพวกเขาจะปรากฏขึ้นทางด้านขวาของหน้าจอในประสบการณ์
คุณจะได้เรียนรู้วิธีการแสดงผลที่ปรับแต่งเองได้มากขึ้นในการฝึกสอนในภายหลัง แต่ลีดเดอร์บอร์ดเป็นวิธีที่เรียบง่ายที่สุดในการสร้างระบบจัดอันดับที่มองเห็นได้ใน Roblox
ดีที่สุดที่จะใส่สคริปที่ติดตั้งสถานะประสบการณ์ใน ServerScriptService เพราะพวกเขาจะทำงานอัตโนมัติเมื่อประสบการณ์เริ่มขึ้น ใน ServerScriptService สร้างสคริปที่มีชื่อว่า SetupPoints
ฟังผู้เล่น
ใน Roblox, บริการ เป็นวัตถุที่ประสบความสำเร็จซึ่งประกอบด้วยหลายรายการของคุณสมบัติที่มีประโยชน์ บริการ Class.Players มีอีเวนต์ที่มีชื่อว่า Class.Players.PlayerAdded|PlayerAdded
คุณสามารถเข้าถึงบริการด้วยฟังก์ชัน GetService ในตัวอุปกรณ์ game สิ่งนี้เป็นตัวแปรที่สามารถเข้าถึงได้จากทุกที่ที่มีทุกอย่างในประสบการณ์ของ
สร้างตัวแปรสำหรับบริการผู้เล่นโดยใช้ game:GetService("Players")
สร้างฟังก์ชันที่มีชื่อว่า onPlayerAdded ด้วยตัวแปรสำหรับผู้เล่นที่เข้ามา
เชื่อมต่อฟังก์ชัน onPlayerAdded ไปยังเหตุการณ์ PlayerAdded
local Players = game:GetService("Players")local function onPlayerAdded(player)endPlayers.PlayerAdded:Connect(onPlayerAdded)
สร้างไดเรกทอรีสถิติ
ตารางอันดับFolder ใหม่ในวัตถุ Player ของพวกเขาที่เรียกว่า #le
สร้างวัตถุใหม่ Folder โดยใช้ Instance.new("Folder") เก็บผลลัพธ์ในตัวแปรใหม่ที่มีชื่อว่า leaderstats
local function onPlayerAdded(player)local leaderstats = Instance.new("Folder")endตั้งค่าค่าชื่อของ leaderstats เป็น "leaderstats"
พ่อ leaderstats ถึง player
local Players = game:GetService("Players")local function onPlayerAdded(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = playerendPlayers.PlayerAdded:Connect(onPlayerAdded)
การสร้างแต้ม
ระบบลีดเดอร์บอร์ดอ่านค่าใด ๆ ในโฟลเดอร์ leaderstats และแสดงผลลัพธ์ที่พบ
เพื่อเพิ่มสถิติที่จะติดตามคะแนนของผู้เล่นให้กับไดอารี่ IntValue ใหม่สามารถเป็นลูกพี่ลูกน้องของไดอารี่ leaderstats ได้ ชื่อของวัตถุมีค่าจะปรากฏร่วมกับมูลค่าปัจจุบันของม
- ตั้งค่า Name ให้เป็น "Points"
- ตั้งค่า Value เป็น 0 นี่คือสิ่งที่ลีดเดอร์บอร์ดจะแสดงให้ผู้เล่นเห็นในตอนแรก
- เป็นพ่อของวัตถุ 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)
ทดสอบประสบการณ์ของคุณและคุณควรเห็นกระดานผู้นำปรากฏขึ้นด้านขวาบนด้วยชื่อผู้ใช้ของคุณและคะแนนสนทนาต่อหน้าพวกเขา
นับเวลา
ผู้ใช้แต้มทุกคนควรได้รับคะแนนสําหรับแต่ละวินาทีที่พวกเขายังมีชีวิตอยู่ สายลูกศร while และการทํางาน task.wait() สามารถใช้เพื่อปรับปรุงค่าของแต้มทุกวินาที
- ในตอนท้ายของสคริปต์, สร้าง while ลูปด้วย true เป็นเงื่อนไข
- ในล็อป, task.wait() สำหรับ 1 วินาที
Players.PlayerAdded:Connect(onPlayerAdded)while true dotask.wait(1)end
รายชื่อผู้เล่น
เพื่อดำเนินการโค้ดสำหรับผู้ใช้ในประสบการณ์นี้คุณต้องทำซ้ำผ่าน รายการ ของผู้ใช้ที่กลับโดย GetPlayers ฟังก์ชัน
รายการเป็นรายการของรายการที่เก็บไว้ในลำดับ แต่ละรายการสามารถเข้าถึงได้โดยตำแหน่ง ของมัน เริ่มต้นจาก 1 คุณสามารถรับความยาวของรายการได้โดยการเรียกแรงขอ
- เก็บผลลัพธ์ของ Players:GetPlayers() ในตัวแปร playerList
- สร้าง สําหรับ ห่วงโซ่ด้วยมูลค่าเริ่มต้นของ 1 และมูลค่าสิ้นสุดของ #playerList เพื่อให้คุณได้รับหนึ่งการเรียกใช้ของห่วงโซ่ต่อผู้เล่น
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList do-- เพิ่มสูตรของคุณที่นี่สำหรับผู้เล่นใน playerListendend
การให้คะแนน
เพื่อให้คะแนนผู้ใช้ในแต่ละบัญชีในสแน็ปโดยใช้แท็งก์ของพวกเขา คุณจะต้องเอาผู้ใช้ออกจากแท็งก์ และเพิ่ม 1 ใน leaderstats วัตถุที่เก็บไว้ในโฟลเดอร์ leaderstats ของพวกเขา
วัตถุที่เก็บไว้ใน mat阵สามารถเข้าถึงได้โดยใช้ เครื่องหมายกว้างขวาง - อินสแตนซ์, รายการแรกใน mat阵 playerList สามารถเข้าถึงได้ด้วย
- เก็บผู้ใช้ที่ playerList[currentPlayer] ในแปรที่มีชื่อว่า player
- เก็บรวบรวม คะแนนของผู้ใช้ ในตัวแปรที่มีชื่อว่า points
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList dolocal player = playerList[currentPlayer]local points = player.leaderstats.Pointspoints.Value += 1endend
ทดสอบประสบการณ์ของคุณและคุณควรพบว่าลีดเดอร์บอร์ดแสดงคะแนนของผู้เล่นของคุณเพิ่มขึ้น 1 ทุกวินาที
ฟังตัวละคร
เป้าหมายของประสบการณ์คือการดูว่าใครสามารถอยู่รอดได้นานที่สุดดังนั้นผู้ใช้ที่ตายจะต้องมีแต้มรีเซ็ตเป็น 0
คุณจะต้องรับรุ่น ตัวละคร สำหรับผู้ใช้เพื่อตรวจจับเมื่อพวกเขาตาย ผู้เล่น
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
แม้ว่าคุณจะรวมผู้ใช้ในสมบัติของฟังก์ชัน onCharacterAdded แต่การเหตุการณ์จริง CharacterAdded เพียงแค่ส่งคืนตัวละครไม่ใช่ผู้ใช้ที่เกี่ยวข้อง เพื่อ
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 ตั้งอยู่ภายในโมเดลตัวละคร แต่เนื้อหาของโมเดลนั้นจะถูกรวบรวมเฉพาะเมื่อผู้ใช้เรียกตัวเองสปอน เพื่อให้โค้ดของคุณป
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
end
หน้าต่างที่คุณต้องการเชื่อมต่อกับเหตุการณ์ที่ตายจะสั้นมากและจะมีเฉพาะที่นี่เท่านั้นดังนั้นคุณจึงสามารถใช้หน้าต่างอนามัยอีกครั้ง
- เชื่อมต่อคุณสมบัติใหม่ที่ไม่ระบุชื่อให้กับอีเวนต์ ตาย ของมนุษย์
- ในคุณสมบัติที่ไม่ระบุชื่อ, สร้างตัวแปรที่มีชื่อว่า points สำหรับวัตถุ คะแนน ของผู้เล่น
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
ทดสอบสิ่งนี้และคะแนนของผู้ใช้จะรีเซ็ตเมื่อพวกเขาตาย
ตรวจสอบผู้เล่น
หากผู้ใช้ยังคงได้รับแต้มแม้ว่าพวกเขาจะตาย, มันเกือบจะไม่ในวิญญาณของประสบการณ์ดังนั้นจึงจำเป็นต้องตรวจสอบว่าผู้ใช้มีชีวิตอยู่ก่อนที่จะมอบรางวัลแต้ม
คุณต้องเริ่มต้นด้วยการกำหนด ค่าตัวละคร ใน onPlayerAdded ฟังก์ชันที่สามารถใช้เพื่อตรวจสอบว่าผู้ใช้มีชีวิตหรือไม่ ในขณะนี้ผู้ใช้ยังไม่ได้เกิดและสปอน เนื่องจากรุ่
คุณสมบัติให้คุณสามารถปรับแต่งวัตถุใน Roblox ด้วยข้อมูลของคุณเอง คุณสมบัติประกอบด้วยชื่อและมูลค่า
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 เพื่อให้ผู้ใช้สามารถเริ่มรับคะแนนได้อีก
- ใน onCharacterAdded ตั้งค่าค่า IsAlive ของ player ให้เป็น 1> true1>
- ใน onCharacterDied ตั้งค่าค่า IsAlive ของ player เป็น 1> ปลอม1>
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
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList dolocal player = playerList[currentPlayer]if player:GetAttribute("IsAlive") thenlocal points = player.leaderstats.Pointspoints.Value += 1endendend
ทดสอบประสบการณ์ของคุณตอนนี้และคุณควรพบว่าผู้ใช้ได้รับคะแนนทุกวินาทีที่พวกเขามีชีวิตอยู่และอยู่ที่ 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