Créer des équipes vous permet de trier les joueurs en groupes qui s'affrontent pour atteindre un objectif commun, comme marquer le plus de points ou franchir une ligne d'arrivée avant les autres membres de l'équipe ennemie. Pour un jeu de tir à la première personne, la création d'équipes est particulièrement importante car elle établit des stratégies de jeu complexes et coordonnées qui dépassent les compétences de tout joueur individuel.
En utilisant le jeu de laser tag d'exemple comme référence, cette section du tutoriel vous apprend à trier les joueurs en équipes, y compris des conseils de script sur :
- Utiliser la fonctionnalité par défaut du service Teams pour assigner les joueurs à l'équipe verte ou rose.
- Aider les joueurs à différencier leurs alliés et les membres de l'équipe ennemie grâce à des indicateurs d'équipe à l'écran et dans le jeu.
- Permettre un gameplay indulgent qui ne pénalise pas les joueurs pour avoir tiré sur leurs coéquipiers.
Après avoir terminé cette section, vous apprendrez à propos des scripts qui permettent aux joueurs de réapparaître dans un hall neutre ou une zone de réapparition d'équipe, de personnaliser les visuels du champ de force en première personne, et de gérer l'état du client à la fois depuis le serveur et le client.

Assigner des couleurs d'équipe
Le jeu de laser tag d'exemple utilise le service Teams comme base pour créer deux équipes car le service offre un comportement de tri d'équipe intégré qui fonctionne généralement dès le départ. Par exemple, sans aucun effort de script supplémentaire, le service gère des actions telles que :
- Trier et équilibrer les joueurs de manière égale dans chaque équipe.
- Regrouper les joueurs sous leur équipe sur le tableau des scores.
- Teinter les noms des joueurs dans l'espace 3D à la couleur de leur équipe correspondante.
- Faire apparaître les joueurs à des emplacements de réapparition distincts auxquels seule leur équipe peut accéder.
En raison de cette fonctionnalité par défaut, l'exemple active le service Teams, puis utilise deux objets Team distincts avec des valeurs de propriétés Team.Color différentes pour représenter chaque équipe : menthe pour l'équipe qui se regroupe d'un côté de la carte, et rose carnation pour l'équipe qui se regroupe de l'autre côté de la carte. Ces couleurs spécifiques sont utiles car elles sont complémentaires, ce qui signifie qu'elles se contrastent bien, et elles permettent aux joueurs de scanner facilement leur environnement et de s'orienter dans le bâtiment et par rapport aux autres joueurs.




Il est important de noter le nom exact BrickColor pour la propriété Team.Color car le jeu utilise ce nom dans de nombreux scripts pour suivre les joueurs lorsqu'ils se trient en équipes, incrémenter les points lorsque les joueurs éliminent des joueurs ennemis pendant un round, et mettre à jour des éléments d'interface utilisateur personnalisés. Par exemple, lorsque le round commence, ReplicatedStorage ⟩ HUDGuiSetup nécessite startSyncingTeamColor, et startSyncingTeamPoints qui font tous deux référence à Team.Color pour effectuer des actions uniques pour chaque équipe.
startSyncingTeamColor fait référence à Team.Color afin de pouvoir assigner la couleur et l'icône correctes pour l'indicateur d'équipe du joueur en bas à gauche de son écran.


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)
endAfficher les indicateurs d'équipe
Une fois qu'un joueur est trié dans une équipe, il doit être capable de déchiffrer rapidement à quelle équipe il appartient et de différencier ses alliés des membres de l'équipe ennemie. Cette capacité est importante car le gameplay d'un jeu de tir à la première personne nécessite que les joueurs prennent des décisions stratégiques rapides lorsqu'ils se trouvent dans des zones de combat afin de ne pas être éliminés et de perdre le round.
Pour préparer les joueurs à réussir, le jeu de laser tag d'exemple fournit plusieurs indicateurs d'équipe à la fois à l'écran et dans l'espace 3D :
- Indicateur de joueur – UI personnalisée à l'écran qui affiche la couleur et l'icône de l'équipe du joueur.
- Indicateur d'équipe – UI personnalisée dans le jeu qui affiche la couleur de l'équipe du joueur.
- Indicateur de tableau des scores – UI par défaut du service Teams à l'écran qui regroupe les joueurs sous leur couleur d'équipe.
- Teinte de nom – UI dans le jeu par défaut du service Teams qui teint le nom du joueur au-dessus de sa tête à la couleur de son équipe.




Vous n'avez pas besoin de faire de travail supplémentaire pour l'Indicateur de Tableau des Scores ou la Teinte de Nom en dehors de l'assignation des couleurs d'équipe de la section précédente du tutoriel, mais les indicateurs d'équipe UI personnalisés nécessitent plus d'efforts de programmation pour afficher les indicateurs et occlure les indicateurs ennemis lorsqu'ils sont derrière des murs. Pour une explication complète des scripts qui contrôlent le comportement de l'UI personnalisée, ainsi que sur la façon de mettre en œuvre chaque élément d'UI lui-même, consultez Indicateur de Joueur et Indicateur d'Équipe du Curriculum UI.
Désactiver le tir ami
Alors que certains jeux de tir à la première personne pénalisent les joueurs qui tirent sur leurs propres coéquipiers, le jeu de laser tag d'exemple permet un gameplay plus indulgent en désactivant le tir ami. Cette décision de conception permet à chacun d'augmenter uniquement le score de son équipe, sans le diminuer à cause d'accidents de jeu.
Pour comprendre comment l'exemple met en œuvre cette fonctionnalité, examinez comment ServerScriptService ⟩ LaserBlastHandler ⟩ processTaggedPlayers ⟩ onPlayerTagged gère les dégâts infligés aux joueurs marqués. Lorsque le serveur détecte une collision entre le tir d'un joueur et un autre joueur, il appelle la fonction onPlayerTagged pour comprendre quel joueur a tiré, quel joueur a été touché par le tir, et combien de points de vie cela devrait retirer de la santé du joueur selon le type de blaster.
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)Avant de diminuer la santé, le script vérifie d'abord si le joueur marqué est dans la même équipe que le joueur qui a initié le tir. S'ils sont dans la même équipe, le script ignore complètement les données du tir.
local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- Interdire le tir ami
if isFriendly then
return
endCependant, si le joueur marqué est dans l'équipe ennemie, le joueur subit le montant de dégâts approprié selon le type de blaster. De plus, si le joueur subit suffisamment de dégâts pour être éliminé, le script récompense un point à l'équipe du joueur qui a initié le tir. Pour plus d'informations sur la façon dont l'exemple suit les points, consultez Ajouter des rounds plus loin dans le tutoriel.
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 onPlayerTaggedSi vous deviez tester le jeu maintenant, tous les joueurs apparaîtraient aléatoirement dans l'une ou l'autre zone de réapparition aux extrémités opposées de l'arène, peu importe à quelle équipe ils appartiennent, ce qui signifie que chaque équipe apparaîtrait juste à côté de l'autre.
Pour résoudre ce problème, la section suivante du tutoriel vous apprend la logique personnalisée derrière la restriction de la réapparition d'équipe à certains emplacements de réapparition, la gestion de l'état du client lorsque les joueurs quittent la zone de réapparition après avoir sélectionné leur blaster, et la réapparition des joueurs dans leur zone de réapparition ou leur zone de hall lorsque leur santé atteint zéro.