Criando 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 os jogadores em grupos que competem para completar um objetivo comum, como pontuação de mais pontos ou cruzamento de uma linha de chegada antes de outros membros de equipe inimigos. Para um primeiro jogador, criar equipes é particularmente importante, pois estabelece estratégias de jogo complexas e coordenadas além do conjunto de habilidades de qualquer jogador individual.

Usando a experiência de laser de exemplo como referência, esta seção do tutorial ensina você a classificar os jogadores em times, incluindo diretrizes de script sobre:

  • Usando a funcionalidade padrão do serviço Teams para atribuir jogadores ao Equipeverde ou rosa.
  • Ajuda os jogadores a se diferenciar entre seus aliados e membros de sua equipe inimiga através dos indicadores de equipe na tela e na experiência.
  • Habilitando jogabilidade perdoável que não penaliza os jogadores por explodir seus companheiros de equipe.

Depois de concluir esta seção, você aprenderá sobre os scripts que permitem que os jogadores gerem ou respawnem para uma zona de lobby neutra ou de equipe, personalizem as primeiras visualizações de campo de força do cliente e lidam com o estado do cliente, tanto do servidor quanto do cliente.

Atribuir Cores de Equipe

A experiência de laser tag de exemplo usa o serviço Teams como base para a criação de duas equipes porque o serviço oferece comportamento de classificação de equipe incorporado que funciona amplamente fora da caixa. Por exemplo, sem nenhum esforço adicional de script, o serviço processa ações como:

  • Classificar e balancear os jogadores de forma igual em cada Equipe.
  • Agrupando jogadores sob sua equipe na tabela de classificação.
  • Colora os nomes dos jogadores no espaço 3D para a cor correspondente de sua equipe.
  • Gerando jogadores em locais de spawn distintos que apenas sua equipe pode acesso.

Devido às funcionalidades padrão, o exemplo habilita o serviço Teams, então usa dois objetos Team distintos com propriedades de Team.Color difer

É importante notar o nome exato de BrickColor para a propriedade Team.Color, pois a experiência usa este nome

startSyncingTeamColor referências Team.Color para que possa atribuir a cor e ícone corretos para o indicador de equipe do jogador no canto inferior esquerdo de sua 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, eles precisam ser capazes de decifrar rapidamente qual equipe eles pertencem, e diferenciar entre seus aliados e membros de sua equipe inimiga. Essa capacidade é importante, pois a jogabilidade de um primeiro-persona shooter experience requer que os jogadores tomem decisões estratégicas rápidas, enquanto eles estão em zonas de combate para não serem tagged e perder a rodada.

Para configurar os jogadores para o sucesso, a experiência de laser de amostra fornece vários indicadores de equipe tanto na tela quanto no espaço 3D:

  • Indicador de Jogador – Personalizado na tela do usuário que exibe a cor e o ícone da equipe do jogador.
  • Indicador de Equipe – Personalize a cor do time do jogador na experiência.
  • Indicador de Leaderboard – Serviço padrão do grupo de jogadores abaixo da cor de seu time.
  • Tint de Nome do Jogo – Serviço de Equipes padrão na interface do usuário que tint o nome do jogador acima de sua cabeça para a cor de sua equipe.
Índicadores de Tela
Índice de Jogador
Índice de Liderança
Indicadores de In-Experience
Índicador de Equipe
Tint de Nome

Você não precisa fazer nenhum trabalho adicional para o Indicador de Leaderboard ou Colorido de Nome fora de atribuir cores de equipe a partir da seção anterior do Tutorial, mas os indicadores personalizados do time de indicador exigem mais esforço de programação para exibir os indicadores e excluir os indicadores inimigos quando estiverem atrás de paredes. Para uma explicação completa dos scripts que controlam

Desativar Fogo Amigável

Embora alguns primeiros jogos de tiro em primeira pessoa penalizem os jogadores que explodem seus próprios colegas de equipe, a experiência de laser de exemplo permite que mais jogos sejam perdoáveis, desativando o Iniciar / executaramigável. Essa decisão de design permite que todos aumentem apenas sua pontuação de equipe, não subtrai-la devido a acidentes de jogos.

Para entender como o exemplo implementa essa funcionalidade, examine how ServerScriptService > LaserBlastHandler > processTaggedPlayers > 1> onPlayerTagged1> > 4> chamadas de danos para processar os jogadores que


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

Antes de reduzir a saúde, o script primeiro verifica se o jogador atingido está no mesmo time que o jogador que iniciou o ataque. Se eles estiverem no mesmo Equipe, o script ignora os dados de explosão completamente.


local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- Desabilitar Iniciar / executaramigável
if isFriendly then
return
end

No entanto, se o jogador for marcado está no Equipeinimigo, o jogador leva a quantidade apropriada de dano de acordo com o digitarde blaster. Além disso, se o jogador levar o suficiente de dano para se tornar o marcado fora, o script recompensa um ponto à equipe do jogador que iniciou o blast. Para mais informações sobre como rastrear pontos, veja Adicionando Rounds mais tarde 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 a experiência agora, todos os jogadores iriam aleatoriamente aparecer em uma das duas zonas de spawn no lado oposto da arena, independentemente de qual time eles pertencem, o que significa que cada time apareceria ao lado de cada outro.

Para abordar esse problema, a seguinte seção do tutorial ensina você sobre a lógica personalizada por trás da restrição de spawn de equipe para certos locais de spawn, tratando o estado do cliente à medida que os jogadores saem da área de spawn após selecionar seu blaster e reaparecem os jogadores de volta à sua área de lobby ou zona de saída quando a saúde deles atinge zero.