บทที่ 10: การเพิ่มระบบมัลติเพลเยอร์และการจัดการผู้เล่น
ในบทเรียนนี้ นักเรียนจะได้เรียนรู้วิธีการเพิ่มระบบผู้เล่นหลายคน (Multiplayer) ในเกม Roblox เพื่อให้ผู้เล่นสามารถโต้ตอบกันได้ในสภาพแวดล้อมที่ใช้ร่วมกัน นอกจากนี้ยังครอบคลุมถึงการจัดการข้อมูลผู้เล่น การส่งข้อมูลระหว่างผู้เล่น และการออกแบบกลไกการเล่นแบบทีมเพื่อให้เกมสนุกและท้าทายมากขึ้นสำหรับผู้เล่นหลายคน
10.1 การเพิ่มระบบผู้เล่นหลายคน (Multiplayer Integration)
ระบบผู้เล่นหลายคนในเกม Roblox ช่วยให้ผู้เล่นสามารถโต้ตอบกับผู้อื่นในเกมได้ เช่น การแข่งขันกัน การร่วมทำเควส หรือการแบ่งปันทรัพยากร ระบบนี้ใช้ RemoteEvents และ RemoteFunctions เพื่อส่งข้อมูลระหว่างผู้เล่นกับเซิร์ฟเวอร์
ขั้นตอนการสร้างระบบผู้เล่นหลายคน:
- ใน Roblox Studio ให้สร้าง RemoteEvent โดยคลิกขวาที่ ReplicatedStorage แล้วเลือก Insert Object จากนั้นเลือก RemoteEvent
- ตั้งชื่อ RemoteEvent เช่น "PlayerAction" เพื่อใช้ส่งข้อมูลระหว่างผู้เล่น
- เขียนโค้ดสำหรับฝั่งเซิร์ฟเวอร์และฝั่งผู้เล่นเพื่อรับข้อมูลที่ส่งผ่าน RemoteEvent
ตัวอย่างการส่งข้อมูลเมื่อผู้เล่นทำคะแนน:
-- สคริปต์ฝั่งเซิร์ฟเวอร์ (Server Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local playerActionEvent = ReplicatedStorage:WaitForChild("PlayerAction")
playerActionEvent.OnServerEvent:Connect(function(player, action)
if action == "scored" then
print(player.Name .. " has scored!")
end
end)
-- สคริปต์ฝั่งผู้เล่น (Local Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local playerActionEvent = ReplicatedStorage:WaitForChild("PlayerAction")
-- เมื่อผู้เล่นทำคะแนน จะส่งข้อมูลไปยังเซิร์ฟเวอร์
playerActionEvent:FireServer("scored")
ในตัวอย่างนี้ เมื่อผู้เล่นทำคะแนน ระบบจะส่งข้อมูลไปยังเซิร์ฟเวอร์และแจ้งว่าใครเป็นผู้ทำคะแนน
10.2 การจัดการข้อมูลผู้เล่น (Player Management)
ในระบบผู้เล่นหลายคน การจัดการข้อมูลผู้เล่น เช่น ชื่อผู้เล่น, คะแนน, และสถานะของผู้เล่นเป็นสิ่งที่สำคัญ การใช้ leaderstats เป็นวิธีที่นิยมในการเก็บข้อมูลเหล่านี้สำหรับผู้เล่นแต่ละคน
ตัวอย่างการสร้าง leaderstats สำหรับผู้เล่น:
game.Players.PlayerAdded:Connect(function(player)
-- สร้าง leaderstats สำหรับเก็บข้อมูลคะแนน
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
-- สร้างตัวแปร Score สำหรับเก็บคะแนนของผู้เล่น
local score = Instance.new("IntValue")
score.Name = "Score"
score.Value = 0 -- เริ่มต้นที่คะแนน 0
score.Parent = leaderstats
end)
ในตัวอย่างนี้ เมื่อผู้เล่นเข้าสู่เกม ระบบจะสร้างตัวแปร Score สำหรับผู้เล่นแต่ละคนเพื่อเก็บคะแนนและแสดงใน leaderboard
10.3 การออกแบบเกมแบบทีม (Team-Based Game Design)
เกมที่มีการเล่นแบบทีมจะช่วยเพิ่มความสนุกและท้าทายให้กับผู้เล่น โดยผู้เล่นจะถูกจัดเข้าทีมและทำงานร่วมกันเพื่อบรรลุเป้าหมาย เกมแบบทีมสามารถใช้ Teams ใน Roblox เพื่อจัดการสมาชิกในแต่ละทีมได้
ขั้นตอนการสร้างระบบทีม:
- ใน Explorer คลิกขวาที่ Teams แล้วเลือก Insert Object จากนั้นเลือก Team
- ตั้งชื่อทีม เช่น "Red Team" และ "Blue Team"
- กำหนดสีของทีมเพื่อให้ผู้เล่นรู้ว่าตนเองอยู่ในทีมใด
ตัวอย่างการสร้างทีมในเกม:
local Teams = game:GetService("Teams")
-- สร้างทีม Red
local redTeam = Instance.new("Team")
redTeam.Name = "Red Team"
redTeam.TeamColor = BrickColor.new("Bright red")
redTeam.Parent = Teams
-- สร้างทีม Blue
local blueTeam = Instance.new("Team")
blueTeam.Name = "Blue Team"
blueTeam.TeamColor = BrickColor.new("Bright blue")
blueTeam.Parent = Teams
-- เพิ่มผู้เล่นเข้าทีม Red
game.Players.PlayerAdded:Connect(function(player)
player.Team = redTeam
print(player.Name .. " has joined the Red Team!")
end)
ในตัวอย่างนี้ ผู้เล่นจะถูกเพิ่มเข้าไปในทีม Red เมื่อเข้าสู่เกม ซึ่งทีมสามารถมีสีที่แตกต่างกันเพื่อให้ผู้เล่นจำแนกทีมได้ง่าย
10.4 การส่งข้อมูลระหว่างผู้เล่นหลายคน (Sending Data Between Players)
การส่งข้อมูลระหว่างผู้เล่นหลายคน เช่น การแชร์ไอเท็ม การแจ้งเตือน หรือการส่งคะแนน สามารถทำได้โดยใช้ RemoteEvents เพื่อให้ผู้เล่นสามารถโต้ตอบกันได้ในเกมแบบเรียลไทม์
ตัวอย่างการส่งข้อความระหว่างผู้เล่น:
-- สคริปต์ฝั่งเซิร์ฟเวอร์ (Server Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local messageEvent = Instance.new("RemoteEvent", ReplicatedStorage)
messageEvent.Name = "PlayerMessage"
game.Players.PlayerAdded:Connect(function(player)
messageEvent.OnServerEvent:Connect(function(_, message)
print(player.Name .. ": " .. message)
messageEvent:FireAllClients(player.Name, message) -- ส่งข้อความไปยังผู้เล่นทุกคน
end)
end)
-- สคริปต์ฝั่งผู้เล่น (Local Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local messageEvent = ReplicatedStorage:WaitForChild("PlayerMessage")
-- ส่งข้อความไปยังเซิร์ฟเวอร์
local function sendMessage(message)
messageEvent:FireServer(message)
end
-- รับข้อความจากผู้เล่นคนอื่น
messageEvent.OnClientEvent:Connect(function(playerName, message)
print(playerName .. " says: " .. message)
end)
ในตัวอย่างนี้ ผู้เล่นสามารถส่งข้อความไปยังเซิร์ฟเวอร์ และเซิร์ฟเวอร์จะแจ้งข้อความนั้นให้ผู้เล่นทุกคนทราบในเกม
10.5 การจัดการการออกจากเกมและการบันทึกข้อมูล (Player Leaving and Data Saving)
เมื่อผู้เล่นออกจากเกม ระบบจะต้องสามารถจัดการการออกและบันทึกข้อมูลของผู้เล่นได้ เพื่อให้ข้อมูลสำคัญ เช่น คะแนนหรือสถิติ ไม่สูญหาย
ตัวอย่างการบันทึกข้อมูลเมื่อผู้เล่นออกจากเกม:
game.Players.PlayerRemoving:Connect(function(player)
local playerScore = player.leaderstats.Score.Value
print(player.Name .. " has left the game with a score of: " .. playerScore)
-- คุณสามารถเพิ่มการบันทึกข้อมูลลงในฐานข้อมูลได้ที่นี่
end)
ในตัวอย่างนี้ เมื่อผู้เล่นออกจากเกม ระบบจะแสดงคะแนนสุดท้ายของผู้เล่น และสามารถบันทึกข้อมูลนี้ลงในฐานข้อมูลสำหรับการเรียกใช้ในอนาคต
ในบทเรียนนี้ นักเรียนได้เรียนรู้วิธีการเพิ่มระบบผู้เล่นหลายคนในเกม การจัดการข้อมูลผู้เล่น การส่งข้อมูลระหว่างผู้เล่น และการออกแบบเกมแบบทีม การนำระบบมัลติเพลเยอร์เข้ามาในเกมจะช่วยเพิ่มความท้าทายและความสนุกสนานให้กับผู้เล่นที่สามารถโต้ตอบและแข่งขันกันได้แบบเรียลไทม์ นอกจากนี้ ยังได้เรียนรู้การจัดการข้อมูลผู้เล่นและการบันทึกข้อมูลเมื่อผู้เล่นออกจากเกม เพื่อให้เกมทำงานได้อย่างมีประสิทธิภาพมากขึ้น