บทที่ 5: การสร้างระบบจัดการผู้เล่นหลายคน
ในบทเรียนนี้ นักเรียนจะได้เรียนรู้วิธีสร้างระบบสำหรับเกมที่รองรับผู้เล่นหลายคน (Multiplayer) ใน Roblox โดยใช้ RemoteEvents และ RemoteFunctions เพื่อส่งข้อมูลระหว่างผู้เล่นและเซิร์ฟเวอร์ ระบบผู้เล่นหลายคนช่วยให้ผู้เล่นสามารถเล่นเกมร่วมกัน แบ่งปันข้อมูล หรือแข่งขันกันในเกมเดียวกัน
5.1 การแนะนำ RemoteEvents และ RemoteFunctions
RemoteEvents และ RemoteFunctions เป็นเครื่องมือที่ช่วยให้เราส่งข้อมูลระหว่างเซิร์ฟเวอร์และผู้เล่นได้ เนื่องจากในเกม Roblox การทำงานบางอย่างจำเป็นต้องถูกประมวลผลที่เซิร์ฟเวอร์ (Server) หรือคลายเซ็นทรัลของเกม ขณะที่บางอย่างจะทำงานที่ผู้เล่น (Client) เราสามารถใช้เครื่องมือเหล่านี้เพื่อส่งข้อมูล เช่น คะแนน, การโจมตี, หรือการแชร์ข้อมูลอื่น ๆ ระหว่างผู้เล่นหลายคน
RemoteEvents: ใช้สำหรับส่งข้อมูลหรือเหตุการณ์โดยไม่ต้องรับค่ากลับมา
RemoteFunctions: ใช้สำหรับการสื่อสารที่ส่งข้อมูลและต้องการผลลัพธ์ตอบกลับจากฝั่งเซิร์ฟเวอร์หรือผู้เล่น
5.2 การสร้าง RemoteEvents
การใช้ RemoteEvents ช่วยให้เราส่งข้อมูลระหว่างเซิร์ฟเวอร์และผู้เล่น เช่น การแจ้งเตือนเมื่อผู้เล่นใด ๆ ทำคะแนน หรือเมื่อผู้เล่นทำกิจกรรมใด ๆ ที่ส่งผลต่อผู้เล่นคนอื่น ๆ
ขั้นตอนการสร้าง RemoteEvents:
- คลิกขวาที่ ReplicatedStorage ใน Explorer
- เลือก Insert Object แล้วเลือก RemoteEvent
- ตั้งชื่อให้กับ RemoteEvent เช่น "PlayerScored"
ตัวอย่างการใช้งาน RemoteEvents:
-- สคริปต์ฝั่งเซิร์ฟเวอร์ (Server Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local playerScoredEvent = ReplicatedStorage:WaitForChild("PlayerScored")
game.Players.PlayerAdded:Connect(function(player)
playerScoredEvent:FireAllClients(player.Name, 10) -- ส่งข้อมูลไปยังผู้เล่นทุกคนเมื่อผู้เล่นทำคะแนน
end)
-- สคริปต์ฝั่งผู้เล่น (Local Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local playerScoredEvent = ReplicatedStorage:WaitForChild("PlayerScored")
playerScoredEvent.OnClientEvent:Connect(function(playerName, points)
print(playerName .. " scored " .. points .. " points!")
end)
ในตัวอย่างนี้ เมื่อผู้เล่นทำคะแนน เซิร์ฟเวอร์จะส่งข้อมูลไปยังผู้เล่นทุกคนว่าผู้เล่นคนไหนได้คะแนนเท่าไร
5.3 การใช้ RemoteFunctions
RemoteFunctions ใช้เมื่อเราต้องการให้ผู้เล่นส่งข้อมูลไปยังเซิร์ฟเวอร์และต้องการผลตอบกลับ เช่น การตรวจสอบสถานะไอเท็ม หรือการคำนวณที่เซิร์ฟเวอร์แล้วส่งค่ากลับไปยังผู้เล่น
ขั้นตอนการสร้าง RemoteFunctions:
- คลิกขวาที่ ReplicatedStorage
- เลือก Insert Object แล้วเลือก RemoteFunction
- ตั้งชื่อให้กับ RemoteFunction เช่น "CheckPlayerScore"
ตัวอย่างการใช้งาน RemoteFunctions:
-- สคริปต์ฝั่งเซิร์ฟเวอร์ (Server Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local checkPlayerScoreFunction = ReplicatedStorage:WaitForChild("CheckPlayerScore")
checkPlayerScoreFunction.OnServerInvoke = function(player)
-- ส่งคะแนนของผู้เล่นกลับไปที่ฝั่ง Client
return player.leaderstats.Score.Value
end
-- สคริปต์ฝั่งผู้เล่น (Local Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local checkPlayerScoreFunction = ReplicatedStorage:WaitForChild("CheckPlayerScore")
local playerScore = checkPlayerScoreFunction:InvokeServer() -- ส่งคำขอไปยังเซิร์ฟเวอร์เพื่อขอข้อมูลคะแนน
print("Your score is: " .. playerScore)
ในตัวอย่างนี้ ผู้เล่นสามารถขอข้อมูลคะแนนของตนเองจากเซิร์ฟเวอร์ได้โดยใช้ RemoteFunction และเซิร์ฟเวอร์จะส่งค่าคะแนนกลับมาให้
5.4 การสร้างระบบการส่งข้อมูลระหว่างผู้เล่นหลายคน
ระบบผู้เล่นหลายคนในเกม Roblox สามารถสร้างให้ผู้เล่นแบ่งปันข้อมูลกันได้ เช่น การส่งข้อความ, การร่วมมือในเควส, หรือการต่อสู้ในเกม การส่งข้อมูลเหล่านี้ต้องทำผ่าน RemoteEvents หรือ RemoteFunctions เพื่อประกันว่าทุกฝ่ายจะได้รับข้อมูลที่ตรงกัน
ตัวอย่างการส่งข้อความระหว่างผู้เล่น:
-- สคริปต์ฝั่งเซิร์ฟเวอร์ (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)
ในตัวอย่างนี้ ผู้เล่นสามารถส่งข้อความไปยังเซิร์ฟเวอร์ และเซิร์ฟเวอร์จะแจ้งให้ผู้เล่นคนอื่น ๆ ทราบเกี่ยวกับข้อความนั้น
5.5 การจัดการข้อมูลผู้เล่นหลายคนในเซิร์ฟเวอร์
เพื่อให้ระบบผู้เล่นหลายคนทำงานได้อย่างมีประสิทธิภาพ เซิร์ฟเวอร์จะต้องจัดการข้อมูลของผู้เล่นหลายคน เช่น การเก็บคะแนนหรือสถานะต่าง ๆ ของผู้เล่นแต่ละคน
ตัวอย่างการเก็บข้อมูลผู้เล่นในเซิร์ฟเวอร์:
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local score = Instance.new("IntValue")
score.Name = "Score"
score.Value = 0
score.Parent = leaderstats
end)
game.Players.PlayerRemoving:Connect(function(player)
print(player.Name .. " has left the game.")
end)
ในตัวอย่างนี้ เซิร์ฟเวอร์จะสร้างข้อมูลคะแนนสำหรับผู้เล่นแต่ละคน และจัดการข้อมูลเมื่อผู้เล่นออกจากเกม
ในบทเรียนนี้ นักเรียนได้เรียนรู้วิธีการสร้างระบบผู้เล่นหลายคนในเกม Roblox โดยใช้ RemoteEvents และ RemoteFunctions เพื่อส่งข้อมูลระหว่างเซิร์ฟเวอร์และผู้เล่น รวมถึงการจัดการข้อมูลผู้เล่นหลายคน ระบบนี้ช่วยให้ผู้เล่นสามารถโต้ตอบและเล่นร่วมกันในเกมเดียวกันได้