Criar equipes

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Criar equipes permite que você classifique jogadores em grupos que competem para completar um objetivo comum, como marcar mais pontos ou cruzar uma linha de chegada antes de outros membros da equipe inimiga. Para um jogo de tiro em primeira pessoa, criar equipes é particularmente importante porque estabelece estratégias de jogo complexas e coordenadas que vão além do conjunto de habilidades de qualquer jogador individual.

Usando o jogo de laser tag de exemplo como referência, esta seção do tutorial ensina como classificar jogadores em equipes, incluindo orientações de script sobre:

  • Usar a funcionalidade padrão do serviço Teams para atribuir jogadores à equipe verde ou rosa.
  • Ajudar os jogadores a diferenciar entre seus aliados e membros da equipe inimiga por meio de indicadores de equipe na tela e no jogo.
  • Permitir uma jogabilidade mais permissiva que não penaliza os jogadores por atingir seus companheiros de equipe.

Após concluir esta seção, você aprenderá sobre os scripts que permitem que os jogadores apareçam ou reapareçam em um lobby neutro ou zona de spawn da equipe, personalizem visuais de campo de força em primeira pessoa e gerenciem o estado do cliente tanto do servidor quanto do cliente.

Atribuir cores às equipes

O jogo de laser tag de exemplo usa o serviço Teams como base para criar duas equipes porque o serviço oferece um comportamento de classificação de equipes embutido que funciona amplamente fora da caixa. Por exemplo, sem nenhum esforço adicional de script, o serviço lida com ações como:

  • Classificar e equilibrar jogadores uniformemente em cada equipe.
  • Agrupar jogadores sob sua equipe no placar.
  • Tingir os nomes dos jogadores no espaço 3D com a cor correspondente à sua equipe.
  • Fazer com que os jogadores apareçam em locais de spawn distintos que apenas sua equipe pode acessar.

Por causa dessa funcionalidade padrão, o exemplo habilita o serviço Teams, e então usa dois objetos distintos Team com diferentes valores de propriedades Team.Color para representar cada equipe: menta para a equipe que se reúne de um lado do mapa, e rosa carnation para a equipe que se reúne do lado oposto do mapa. Essas cores específicas são úteis porque são complementares, o que significa que contrastam bem entre si, e permitem que os jogadores escaneiem facilmente seus arredores e se orientem dentro do prédio e em relação a outros jogadores.

É importante notar o nome exato BrickColor para a propriedade Team.Color porque o jogo usa esse nome em muitos scripts para acompanhar os jogadores à medida que eles se classificam em equipes, incrementar pontos à medida que os jogadores eliminam jogadores inimigos durante uma rodada e atualizar elementos de UI personalizados. Por exemplo, quando uma rodada começa, ReplicatedStorageHUDGuiSetup requer startSyncingTeamColor e startSyncingTeamPoints, que ambos referenciam Team.Color para realizar ações únicas para cada equipe.

startSyncingTeamColor referencia Team.Color para que possa atribuir a cor e o ícone corretos para o indicador de equipe do jogador no canto inferior esquerdo da tela.

Equipe Verde
Equipe Rosa
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

Exibir indicadores de equipe

Uma vez que um jogador é classificado em uma equipe, ele precisa ser capaz de decifrar rapidamente a que equipe pertence e diferenciar entre seus aliados e membros da equipe inimiga. Essa habilidade é importante porque a jogabilidade de um jogo de tiro em primeira pessoa exige que os jogadores tomem decisões estratégicas rápidas enquanto estão em zonas de combate, para que não sejam eliminados e percam a rodada.

Para preparar os jogadores para o sucesso, o jogo de laser tag de exemplo fornece múltiplos indicadores de equipe tanto na tela quanto no espaço 3D:

  • Indicador de Jogador – UI personalizada na tela que exibe a cor e o ícone da equipe do jogador.
  • Indicador de Equipe – UI personalizada no jogo que exibe a cor da equipe do jogador.
  • Indicador de Placar – UI padrão do serviço Teams na tela que agrupa jogadores sob a cor de sua equipe.
  • Tingimento de Nome – UI padrão do serviço Teams no jogo que tinge o nome do jogador acima de sua cabeça com a cor de sua equipe.
Indicadores na tela
Indicador de Jogador
Indicador de Placar
Indicadores no jogo
Indicador de Equipe
Tingimento de Nome

Você não precisa fazer nenhum trabalho adicional para o Indicador de Placar ou Tingimento de Nome além de atribuir as cores das equipes da seção anterior do tutorial, mas os indicadores de equipe da UI personalizada exigem mais esforço de programação para exibir os indicadores e ocultar os indicadores inimigos quando estão atrás de paredes. Para uma explicação completa dos scripts que controlam o comportamento da UI personalizada, bem como como implementar cada elemento da UI, veja Indicador de Jogador e Indicador de Equipe do Currículo de UI.

Desativar fogo amigo

Enquanto alguns jogos de tiro em primeira pessoa penalizam jogadores que atingem seus próprios companheiros de equipe, o jogo de laser tag de exemplo permite uma jogabilidade mais permissiva desativando o fogo amigo. Essa decisão de design permite que todos aumentem apenas a pontuação de sua equipe, e não a diminuam devido a acidentes de jogabilidade.

Para entender como o exemplo implementa essa funcionalidade, examine como ServerScriptServiceLaserBlastHandlerprocessTaggedPlayersonPlayerTagged lida com o dano a jogadores marcados. Quando o servidor detecta uma colisão entre o disparo de um jogador e outro jogador, ele chama a função onPlayerTagged para entender qual jogador disparou, qual jogador foi atingido e quanto dano deve ser removido da saúde do jogador de acordo com o tipo de blaster.

local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)

Antes de diminuir a saúde, o script primeiro verifica se o jogador marcado está na mesma equipe que o jogador que iniciou o disparo. Se eles estiverem na mesma equipe, o script ignora completamente os dados do disparo.

local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- Desabilitar fogo amigo
if isFriendly then
return
end

No entanto, se o jogador marcado estiver na equipe inimiga, o jogador recebe a quantidade apropriada de dano de acordo com o tipo de blaster. Além disso, se o jogador receber dano suficiente para ser eliminado, o script recompensa um ponto para a equipe do jogador que iniciou o disparo. Para mais informações sobre como o exemplo rastreia pontos, veja Adicionar rodadas mais adiante no tutorial.

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

Se você testasse o jogo agora, todos os jogadores apareceriam aleatoriamente em qualquer zona de spawn em extremos opostos da arena, independentemente de a que equipe pertencem, significando que cada equipe apareceria bem próxima uma da outra.

Para resolver esse problema, a próxima seção do tutorial ensina sobre a lógica personalizada por trás da restrição do spawn de equipes a certos locais de spawn, lidando com o estado do cliente à medida que os jogadores saem da área de spawn após selecionar seu blaster, e reaparecendo jogadores de volta à sua zona de spawn ou área de lobby quando sua saúde atinge zero.

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.