Crear equipos

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Crear equipos te permite clasificar a los jugadores en grupos que compiten para completar un objetivo común, como anotar la mayor cantidad de puntos o cruzar una línea de meta antes que otros miembros del equipo enemigo. Para un juego de disparos en primera persona, crear equipos es particularmente importante porque establece estrategias de juego complejas y coordinadas que van más allá de las habilidades de cualquier jugador individual.

Usando el juego de láser tag de muestra como referencia, esta sección del tutorial te enseña cómo clasificar a los jugadores en equipos, incluyendo orientación sobre scripting en:

  • Usar la funcionalidad predeterminada del servicio Teams para asignar jugadores al equipo verde o rosa.
  • Ayudar a los jugadores a diferenciar entre sus aliados y los miembros del equipo enemigo a través de indicadores de equipo en pantalla y en el juego.
  • Permitir un juego indulgente que no penaliza a los jugadores por disparar a sus compañeros de equipo.

Después de completar esta sección, aprenderás sobre los scripts que permiten a los jugadores aparecer o reaparecer en un vestíbulo neutral o en una zona de aparición de equipo, personalizar los visuales del campo de fuerza en primera persona y manejar el estado del cliente tanto desde el servidor como desde el cliente.

Asignar colores de equipo

El juego de láser tag de muestra utiliza el servicio Teams como base para crear dos equipos porque el servicio ofrece un comportamiento de clasificación de equipos incorporado que funciona en gran medida sin necesidad de ajustes. Por ejemplo, sin ningún esfuerzo adicional de scripting, el servicio maneja acciones como:

  • Clasificar y equilibrar a los jugadores de manera uniforme en cada equipo.
  • Agrupar a los jugadores bajo su equipo en la tabla de clasificación.
  • Tintear los nombres de los jugadores en el espacio 3D con el color correspondiente a su equipo.
  • Hacer aparecer a los jugadores en ubicaciones de aparición distintas a las que solo su equipo puede acceder.

Debido a esta funcionalidad predeterminada, el ejemplo habilita el servicio Teams, luego utiliza dos objetos Team distintos con diferentes valores de propiedades Team.Color para representar cada equipo: menta para el equipo que se reúne en un lado del mapa, y rosa carnal para el equipo que se reúne en el lado opuesto del mapa. Estos colores específicos son útiles porque son complementarios, lo que significa que contrastan bien entre sí, y permiten a los jugadores escanear fácilmente su entorno y orientarse dentro del edificio y hacia otros jugadores.

Es importante notar el nombre exacto de BrickColor para la propiedad Team.Color porque el juego utiliza este nombre en muchos scripts para hacer un seguimiento de los jugadores a medida que se clasifican en equipos, incrementar puntos a medida que los jugadores eliminan a los jugadores enemigos durante una ronda y actualizar elementos de UI personalizados. Por ejemplo, cuando comienza una ronda, ReplicatedStorageHUDGuiSetup requiere startSyncingTeamColor y startSyncingTeamPoints, que ambos hacen referencia a Team.Color para realizar acciones únicas para cada equipo.

startSyncingTeamColor hace referencia a Team.Color para que pueda asignar el color y el ícono correctos para el indicador de equipo del jugador en la esquina inferior izquierda de su pantalla.

Equipo Verde
Equipo 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

Mostrar indicadores de equipo

Una vez que un jugador es clasificado en un equipo, necesita poder descifrar rápidamente a qué equipo pertenece y diferenciar entre sus aliados y los miembros del equipo enemigo. Esta habilidad es importante porque la jugabilidad de un juego de disparos en primera persona requiere que los jugadores tomen decisiones estratégicas rápidas mientras están en zonas de combate para que no sean eliminados y pierdan la ronda.

Para preparar a los jugadores para el éxito, el juego de láser tag de muestra proporciona múltiples indicadores de equipo tanto en pantalla como en el espacio 3D:

  • Indicador de Jugador – UI personalizada en pantalla que muestra el color y el ícono del equipo del jugador.
  • Indicador de Equipo – UI personalizada en el juego que muestra el color del equipo del jugador.
  • Indicador de Tabla de Clasificación – UI predeterminada del servicio Teams en pantalla que agrupa a los jugadores debajo de su color de equipo.
  • Tinte de Nombre – UI predeterminada del servicio Teams en el juego que tiñe el nombre del jugador sobre su cabeza con el color de su equipo.
Indicadores en pantalla
Indicador de Jugador
Indicador de Tabla de Clasificación
Indicadores en el juego
Indicador de Equipo
Tinte de Nombre

No necesitas hacer ningún trabajo adicional para el Indicador de Tabla de Clasificación o el Tinte de Nombre fuera de asignar colores de equipo de la sección anterior del tutorial, pero los indicadores de equipo de UI personalizados requieren más esfuerzo de programación tanto para mostrar los indicadores como para ocultar los indicadores enemigos cuando están detrás de paredes. Para una explicación completa de los scripts que controlan el comportamiento de la UI personalizada, así como cómo implementar cada elemento de UI, consulta Indicador de Jugador y Indicador de Equipo del Currículo de UI.

Desactivar fuego amigo

Mientras que algunos juegos de disparos en primera persona penalizan a los jugadores que disparan a sus propios compañeros de equipo, el juego de láser tag de muestra permite una jugabilidad más indulgente al desactivar el fuego amigo. Esta decisión de diseño permite que todos solo aumenten su puntuación de equipo, no la disminuyan debido a accidentes de juego.

Para entender cómo el ejemplo implementa esta funcionalidad, examina cómo ServerScriptServiceLaserBlastHandlerprocessTaggedPlayersonPlayerTagged maneja el daño a los jugadores etiquetados. Cuando el servidor detecta una colisión entre el disparo de un jugador y otro jugador, llama a la función onPlayerTagged para entender qué jugador disparó, qué jugador fue golpeado y cuánto daño debería quitar de la salud del jugador según el tipo de blaster.

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

Antes de disminuir la salud, el script primero verifica si el jugador etiquetado está en el mismo equipo que el jugador que inició el disparo. Si están en el mismo equipo, el script ignora completamente los datos del disparo.

local character = playerTagged.Character
local isFriendly = playerBlasted.Team == playerTagged.Team
-- Desactivar fuego amigo
if isFriendly then
return
end

Sin embargo, si el jugador etiquetado está en el equipo enemigo, el jugador recibe la cantidad adecuada de daño según el tipo de blaster. Además, si el jugador recibe suficiente daño para ser etiquetado, el script recompensa un punto al equipo del jugador que inició el disparo. Para más información sobre cómo el ejemplo rastrea puntos, consulta Agregar rondas más adelante en el 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

Si probaras el juego ahora mismo, todos los jugadores aparecerían aleatoriamente en cualquiera de las zonas de aparición en extremos opuestos de la arena, independientemente de a qué equipo pertenecen, lo que significa que cada equipo aparecería justo al lado del otro.

Para abordar este problema, la siguiente sección del tutorial te enseña sobre la lógica personalizada detrás de restringir la aparición de equipos a ciertas ubicaciones de aparición, manejar el estado del cliente a medida que los jugadores abandonan el área de aparición después de seleccionar su blaster, y reaparecer a los jugadores de vuelta en su zona de aparición o área de vestíbulo cuando su salud llega a cero.

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.