建立團隊 可以將玩家分成團隊來競爭共同的目標,例如得分最多點數或越過其他敵隊成員的終點線。對於第一人稱射擊玩家,建立團隊是非常重要的,因為它會確立複雜、協調的遊戲戰略在任何個人玩家的技能集中以外。
使用 示例雷射標籤體驗 作為參考,這個教學的第一部分教你如何將玩家分成團隊,包括指令碼指南:
- 使用 Teams 服務的預設功能來分配玩家到綠色或粉紅色團隊。
- 協助玩家在畫面和體驗中分辨其盟友和敵方團隊成員。
- 啟用不會懲罰玩家爆炸夥伴的遊戲。
完成此部分後,您將了解允許玩家重生或重生至中立大廳或團隊重生區,自訂第一人稱視角力場視圖,並且處理客戶端狀態,從伺服器和客戶端兩個方面。
分配團隊顏色
示例雷射標籤體驗使用 Teams 服務作為創建兩個團隊的基礎,因為服務提供內置的團隊排序行為,可以廣泛運行在外的箱子。例如,沒有任何額外的指令碼努力,服務處理如下動作:
- 將玩家按照平等排列在每個團隊。
- 在排行榜上將玩家分在他們的隊伍下。
- 在 3D 空間中涂色玩家名稱,以對應他們的團隊顏色。
- 生成玩家到僅其團隊可以存使用權 通行權 存取的區域。
因為這項預設功能,サンプル啟用了 Teams 服務,並使用兩個不同的 Team 屬性值代表每個團隊:<
重要的是,您應該記得 BrickColor 名稱,因為體驗在許多個 Class.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 團隊指示器需要更多程式設計努力才能顯示指示器並包含敵人指示器,當它們位於牆後。對於控制自訂 UI 行為的詳細說明,以及實現每個自��
停用友好火焰
雖然有些第一人稱射擊體驗會對玩家踢出自己的隊友,但樣本雷射標籤體驗可以通過關閉友好射觸發來更容易的遊戲體驗。這個設計決定允許每個人只能提升他們的團隊分數,而不是從它中減算遊戲中的意外。
要了解樣本如何實現此功能,請分析如下 LaserBlastHandler > processTaggedPlayers > onPlayerTagged 處理傷害的玩家。當服務器偵測到玩家的爆炸
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)
在它減少生命值之前,先檢查玩標ged 玩家是否在同一個團隊上,如果他們在同一個團隊上,則會忽略爆炸資料。
local character = playerTagged.Characterlocal isFriendly = playerBlasted.Team == playerTagged.Team-- 停止友好的觸發if isFriendly thenreturnend
如果標記玩家 在敵團隊上 ,玩家會根據噴射器輸入型獲得相應的傷害。此外,如果玩家受到足夠的傷害來成為標記出來,則會獲得 script 給隊友的點數。為了了解樣本如何跟蹤點數,請參閱 在爆裂中獲得獎勵 後半的教學。
local humanoid = character and character:FindFirstChild("Humanoid")if humanoid and humanoid.Health > 0 thenlocal damage = math.min(damageAmount, humanoid.Health)humanoid:TakeDamage(damage)if humanoid.Health <= 0 thenScoring.incrementScore(playerBlasted, 1)endendendreturn onPlayerTagged
如果您現在測試體驗,所有玩家將會在兩個競技場區域的任何一個競技場區域隨機生成。
為了解決這個問題,教學的下一個部分教你關於限制團隊生成到特定生成位置的自訂原理,處理客戶端狀態,當玩家離開生成區域選擇他們的噴射器後,重生玩家回到他們的噴射區或大廳區域,當他們的生命值達到零。