Creare squadre ti consente di ordinare i giocatori in gruppi che competono per completare un obiettivo comune, come segnare il maggior numero di punti o attraversare un traguardo prima degli altri membri della squadra nemica. Per uno sparatutto in prima persona, creare squadre è particolarmente importante perché stabilisce strategie di gioco complesse e coordinate che vanno oltre le abilità di qualsiasi singolo giocatore.
Utilizzando l'esperienza di laser tag campionaria come riferimento, questa sezione del tutorial ti insegna come ordinare i giocatori in squadre, inclusa la guida alla scrittura di script su:
- Utilizzare la funzionalità predefinita del servizio Teams per assegnare i giocatori alla squadra verde o rosa.
- Aiutare i giocatori a differenziare tra i loro alleati e i membri della squadra nemica attraverso indicatori di squadra a schermo e nell'esperienza.
- Abilitare un gameplay perdonante che non penalizza i giocatori per aver colpito i loro compagni di squadra.
Dopo aver completato questa sezione, imparerai a conoscere gli script che consentono ai giocatori di apparire o respawnare in un'area di attesa neutrale o in una zona di spawn di squadra, personalizzare le visualizzazioni del campo di forza in prima persona e gestire lo stato del client sia dal server che dal client.

Assegna colori alle squadre
L'esperienza di laser tag campionaria utilizza il servizio Teams come base per creare due squadre perché il servizio offre un comportamento di ordinamento delle squadre integrato che funziona in gran parte senza bisogno di ulteriori script. Ad esempio, senza sforzi di scripting aggiuntivi, il servizio gestisce azioni come:
- Ordinare e bilanciare i giocatori equamente in ciascuna squadra.
- Raggruppare i giocatori sotto la loro squadra nella leaderboard.
- Tinteggiare i nomi dei giocatori nello spazio 3D con il colore della loro squadra corrispondente.
- Far spawnare i giocatori in posizioni di spawn distinte a cui solo la loro squadra può accedere.
A causa di questa funzionalità predefinita, l'esempio abilita il servizio Teams, quindi utilizza due distinti oggetti Team con diversi valori della proprietà Team.Color per rappresentare ciascuna squadra: menta per la squadra che si riunisce da un lato della mappa, e rosa carne per la squadra che si riunisce dall'altro lato della mappa. Questi colori specifici sono utili perché sono complementari, il che significa che si contrastano bene, e consentono ai giocatori di esaminare facilmente i loro dintorni e orientarsi all'interno del edificio e con altri giocatori.




È importante notare il nome esatto BrickColor per la proprietà Team.Color perché l'esperienza utilizza questo nome in molti script per tenere traccia dei giocatori mentre si ordinano in squadre, incrementano i punti quando i giocatori eliminano i giocatori nemici durante un turno e aggiornano elementi UI personalizzati. Ad esempio, quando ha inizio un turno, ReplicatedStorage ⟩ HUDGuiSetup richiede startSyncingTeamColor e startSyncingTeamPoints, che fanno entrambi riferimento a Team.Color per eseguire azioni uniche per ciascuna squadra.
startSyncingTeamColor fa riferimento a Team.Color in modo che possa assegnare il colore e l'icona corretti per l'indicatore di squadra del giocatore nell'angolo in basso a sinistra dello schermo.


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
Mostra indicatori di squadra
Una volta che un giocatore è stato ordinato in una squadra, deve essere in grado di decifrare rapidamente a quale squadra appartiene e differenziare tra i suoi alleati e i membri della squadra nemica. Questa capacità è importante perché il gameplay di un'esperienza di sparatutto in prima persona richiede ai giocatori di prendere decisioni strategiche rapide mentre si trovano in zone di combattimento per non essere eliminati e perdere il turno.
Per preparare i giocatori al successo, l'esperienza di laser tag campionaria fornisce molteplici indicatori di squadra sia a schermo che nello spazio 3D:
- Indicatore Giocatore – UI personalizzata a schermo che mostra il colore e l'icona della squadra del giocatore.
- Indicatore Squadra – UI personalizzata nell'esperienza che mostra il colore della squadra del giocatore.
- Indicatore Leaderboard – UI predefinita del servizio Teams a schermo che raggruppa i giocatori sotto il colore della loro squadra.
- Tinta del Nome – UI predefinita del servizio Teams nell'esperienza che tinge il nome del giocatore sopra la testa con il colore della sua squadra.




Non è necessario fare alcun lavoro aggiuntivo per l'Indicatore Leaderboard o Tinta del Nome al di fuori dell'assegnazione dei colori delle squadre dalla sezione precedente del tutorial, ma gli indicatori di squadra UI personalizzati richiedono più sforzo di programmazione per visualizzare gli indicatori e ostruire gli indicatori nemici quando sono dietro le pareti. Per una spiegazione completa degli script che controllano il comportamento dell'UI personalizzata, così come come implementare ciascun elemento UI stesso, vedere Indicatore Giocatore e Indicatore Squadra dal Curriculum UI.
Disabilita il fuoco amichevole
Mentre alcune esperienze di sparatutto in prima persona penalizzano i giocatori che colpiscono i loro stessi compagni di squadra, l'esperienza di laser tag campionaria consente un gameplay più perdonante disabilitando il fuoco amichevole. Questa decisione di design consente a tutti di aumentare solo il punteggio della propria squadra, senza sottrarlo a causa di incidenti di gioco.
Per capire come l'esempio implementa questa funzionalità, esamina come ServerScriptService ⟩ LaserBlastHandler ⟩ processTaggedPlayers ⟩ onPlayerTagged gestisce il danno ai giocatori taggati. Quando il server rileva una collisione tra il colpo di un giocatore e un altro giocatore, chiama la funzione onPlayerTagged per capire quale giocatore ha sparato, quale giocatore è stato colpito e quanto danno deve rimuovere dalla salute del giocatore secondo il tipo di blaster.
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)
Prima di diminuire la salute, lo script verifica prima se il giocatore taggato è nella stessa squadra del giocatore che ha effettuato il colpo. Se sono nella stessa squadra, lo script ignora completamente i dati del colpo.
local character = playerTagged.Characterlocal isFriendly = playerBlasted.Team == playerTagged.Team-- Disallow friendly fireif isFriendly thenreturnend
Tuttavia, se il giocatore taggato è nella squadra nemica, il giocatore subisce la giusta quantità di danno secondo il tipo di blaster. Inoltre, se il giocatore subisce abbastanza danni da essere taggato, lo script assegna un punto alla squadra del giocatore che ha effettuato il colpo. Per ulteriori informazioni su come l'esempio tiene traccia dei punti, vedere Aggiungi turni più avanti nel tutorial.
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
Se testassi l'esperienza proprio ora, tutti i giocatori apparirebbero casualmente in una delle zone di spawn agli estremi opposti dell'arena, indipendentemente dalla squadra a cui appartengono, il che significa che ciascuna squadra apparirebbe accanto all'altra.
Per affrontare questo problema, la sezione seguente del tutorial ti insegna la logica personalizzata dietro la restrizione della spawn di squadra a determinate posizioni di spawn, gestendo lo stato del client mentre i giocatori lasciano l'area di spawn dopo aver selezionato il loro blaster e respawnando i giocatori di nuovo nella loro zona di spawn o area di attesa quando la loro salute raggiunge zero.