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

กำหนดสีทีม
เกมเลเซอร์แท็กตัวอย่างใช้บริการ Teams เป็นพื้นฐานในการสร้างทีมสองทีม เพราะบริการนี้มีพฤติกรรมการจัดกลุ่มทีมที่สร้างขึ้นมาให้ทำงานได้ทันที ตัวอย่างเช่น โดยไม่ต้องใช้ความพยายามในการเขียนสคริปต์เพิ่มเติม บริการนี้จัดการการกระทำเช่น:
- การจัดกลุ่มและปรับสมดุลผู้เล่นให้เท่าเทียมกันในแต่ละทีม
- การจัดกลุ่มผู้เล่นภายใต้ทีมของพวกเขาบนกระดานคะแนน
- การเปลี่ยนสีชื่อผู้เล่นในพื้นที่ 3D ให้ตรงกับสีทีมของพวกเขา
- การเกิดผู้เล่นในตำแหน่งการเกิดที่แตกต่างกันซึ่งทีมของพวกเขาเท่านั้นที่สามารถเข้าถึงได้
เนื่องจากฟังก์ชันการทำงานเริ่มต้นนี้ ตัวอย่างจึงเปิดใช้งานบริการ Teams จากนั้นใช้วัตถุ Team สองตัวที่แตกต่างกันซึ่งมีค่า Team.Color ที่แตกต่างกันเพื่อแทนแต่ละทีม: สีมิ้นต์ สำหรับทีมที่รวมตัวกันที่ด้านหนึ่งของแผนที่ และ สีชมพูคาร์เนชั่น สำหรับทีมที่รวมตัวกันที่ด้านตรงข้ามของแผนที่ สีเฉพาะเหล่านี้มีประโยชน์เพราะมันเป็นสีที่เสริมกัน ซึ่งหมายความว่ามันตัดกันได้ดี และช่วยให้ผู้เล่นสามารถสแกนสภาพแวดล้อมของพวกเขาได้ง่ายและปรับตัวเองภายในอาคารและกับผู้เล่นคนอื่น ๆ




สิ่งสำคัญคือต้องทราบชื่อ BrickColor ที่แน่นอนสำหรับคุณสมบัติ Team.Color เพราะเกมใช้ชื่อนี้ในหลายสคริปต์ในเกมเพื่อติดตามผู้เล่นเมื่อพวกเขาจัดกลุ่มเป็นทีม เพิ่มคะแนนเมื่อผู้เล่นทำการแท็กผู้เล่นศัตรูในระหว่างรอบ และอัปเดตองค์ประกอบ UI ที่กำหนดเอง ตัวอย่างเช่น เมื่อรอบเริ่มต้น ReplicatedStorage ⟩ HUDGuiSetup ต้องการ startSyncingTeamColor และ startSyncingTeamPoints ซึ่งทั้งสองอ้างอิงถึง Team.Color เพื่อดำเนินการเฉพาะสำหรับแต่ละทีม
startSyncingTeamColor อ้างอิงถึง Team.Color เพื่อให้สามารถกำหนดสีและไอคอนที่ถูกต้องสำหรับตัวบ่งชี้ทีมของผู้เล่นที่มุมล่างซ้ายของหน้าจอ


local function setPlayerTeamIcon(gui: ScreenGui)
for _, teamColorIcon in gui.PlayerDisplay.TeamIcons:GetChildren() do
local iconTeamColor = teamColorIcon:GetAttribute(GuiAttribute.teamColor)
teamColorIcon.Visible = localPlayer.TeamColor == iconTeamColor
end
end
local function startSyncingTeamColor(gui: ScreenGui)
setPlayerTeamIcon(gui)
localPlayer:GetPropertyChangedSignal("Team"):Connect(function()
setPlayerTeamIcon(gui)
end)
endแสดงตัวบ่งชี้ทีม
เมื่อผู้เล่นถูกจัดกลุ่มเข้าทีมแล้ว พวกเขาจำเป็นต้องสามารถแยกแยะได้อย่างรวดเร็วว่าพวกเขาอยู่ทีมไหน และแยกแยะระหว่างพันธมิตรและสมาชิกทีมศัตรู ความสามารถนี้มีความสำคัญเพราะการเล่นของเกมยิงมุมมองบุคคลที่หนึ่งต้องการให้ผู้เล่นทำการตัดสินใจเชิงกลยุทธ์อย่างรวดเร็วในขณะที่พวกเขาอยู่ในเขตต่อสู้เพื่อไม่ให้ถูกแท็กออกและแพ้รอบ
เพื่อเตรียมผู้เล่นให้ประสบความสำเร็จ เกมเลเซอร์แท็กตัวอย่างมีตัวบ่งชี้ทีมหลายตัวทั้งบนหน้าจอและในพื้นที่ 3D:
- ตัวบ่งชี้ผู้เล่น – UI ที่กำหนดเองบนหน้าจอที่แสดงสีทีมและไอคอนของผู้เล่น
- ตัวบ่งชี้ทีม – UI ในเกมที่กำหนดเองที่แสดงสีทีมของผู้เล่น
- ตัวบ่งชี้กระดานคะแนน – UI บนหน้าจอที่ให้บริการ Teams โดยค่าเริ่มต้นที่จัดกลุ่มผู้เล่นใต้สีทีมของพวกเขา
- การเปลี่ยนสีชื่อ – UI ในเกมที่ให้บริการ Teams โดยค่าเริ่มต้นที่เปลี่ยนสีชื่อของผู้เล่นที่อยู่เหนือหัวของพวกเขาให้เป็นสีทีมของพวกเขา




คุณไม่จำเป็นต้องทำงานเพิ่มเติมสำหรับตัวบ่งชี้กระดานคะแนนหรือตัวบ่งชี้การเปลี่ยนสีชื่อ นอกเหนือจากการกำหนดสีทีมจากส่วนก่อนหน้าของบทช่วยสอน แต่ตัวบ่งชี้ทีม UI ที่กำหนดเองต้องการความพยายามในการเขียนโปรแกรมมากขึ้นเพื่อแสดงตัวบ่งชี้และปิดกั้นตัวบ่งชี้ศัตรูเมื่อพวกเขาอยู่หลังผนัง สำหรับคำอธิบายโดยละเอียดเกี่ยวกับสคริปต์ที่ควบคุมพฤติกรรม UI ที่กำหนดเอง รวมถึงวิธีการนำแต่ละองค์ประกอบ UI ไปใช้เอง โปรดดูที่ ตัวบ่งชี้ผู้เล่น และ ตัวบ่งชี้ทีม จากหลักสูตร UI
ปิดการยิงเพื่อน
ในขณะที่เกมยิงมุมมองบุคคลที่หนึ่งบางเกมลงโทษผู้เล่นที่ยิงเพื่อนร่วมทีม เกมเลเซอร์แท็กตัวอย่างอนุญาตให้มีการเล่นที่ให้อภัยมากขึ้นโดยการปิดการยิงเพื่อน การตัดสินใจในการออกแบบนี้ช่วยให้ทุกคนสามารถเพิ่มคะแนนทีมของตนได้เท่านั้น ไม่ลดลงจากอุบัติเหตุในการเล่น
เพื่อทำความเข้าใจว่าตัวอย่างนี้นำฟังก์ชันการทำงานนี้ไปใช้ได้อย่างไร ให้ตรวจสอบว่า ServerScriptService ⟩ LaserBlastHandler ⟩ processTaggedPlayers ⟩ onPlayerTagged จัดการความเสียหายต่อผู้เล่นที่ถูกแท็กอย่างไร เมื่อเซิร์ฟเวอร์ตรวจพบการชนกันระหว่างการยิงของผู้เล่นและผู้เล่นอีกคน มันจะเรียกฟังก์ชัน onPlayerTagged เพื่อทำความเข้าใจว่าผู้เล่นคนไหนที่ยิงการยิง ผู้เล่นคนไหนที่ถูกยิง และจะต้องลบความเสียหายออกจากสุขภาพของผู้เล่นเท่าใดตามประเภทของปืน
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)ก่อนที่จะลดสุขภาพ สคริปต์จะตรวจสอบก่อนว่าผู้เล่นที่ถูกแท็กอยู่ในทีมเดียวกันกับผู้เล่นที่เริ่มการยิงหรือไม่ หากพวกเขาอยู่ในทีมเดียวกัน สคริปต์จะละเว้นข้อมูลการยิงทั้งหมด
local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- ไม่อนุญาตให้ยิงเพื่อน
if isFriendly then
return
endอย่างไรก็ตาม หากผู้เล่นที่ถูกแท็ก อยู่ ในทีมศัตรู ผู้เล่นจะได้รับความเสียหายตามจำนวนที่เหมาะสมตามประเภทของปืน นอกจากนี้ หากผู้เล่นได้รับความเสียหายเพียงพอจนถูกแท็กออก สคริปต์จะให้คะแนนแก่ทีมของผู้เล่นที่เริ่มการยิง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ตัวอย่างติดตามคะแนน โปรดดูที่ เพิ่มรอบ ในภายหลังในบทช่วยสอน
local humanoid = character and character:FindFirstChild("Humanoid")
if humanoid and humanoid.Health > 0 then
local damage = math.min(damageAmount, humanoid.Health)
humanoid:TakeDamage(damage)
if humanoid.Health <= 0 then
Scoring.incrementScore(playerBlasted, 1)
end
end
end
return onPlayerTaggedหากคุณทดสอบเกมในตอนนี้ ผู้เล่นทุกคนจะเกิดขึ้นแบบสุ่มที่โซนเกิดใดโซนหนึ่งที่อยู่ตรงข้ามกันของสนามแข่งขันโดยไม่คำนึงถึงทีมที่พวกเขาสังกัด ซึ่งหมายความว่าทุกทีมจะเกิดขึ้นอยู่ข้างกัน
เพื่อแก้ไขปัญหานี้ ส่วนถัดไปของบทช่วยสอนจะสอนคุณเกี่ยวกับตรรกะที่กำหนดเองในการจำกัดการเกิดทีมไปยังตำแหน่งการเกิดบางแห่ง การจัดการสถานะของไคลเอนต์เมื่อผู้เล่นออกจากพื้นที่เกิดหลังจากเลือกปืนของพวกเขา และการเกิดใหม่ของผู้เล่นกลับไปยังโซนเกิดหรือพื้นที่ล็อบบี้เมื่อสุขภาพของพวกเขาลดลงเป็นศูนย์