Crear equipos te permite agrupar a los jugadores para completar un objetivo común, como anotar el mayor número de puntos o cruzar una línea de meta antes que otros miembros del equipo enemigo. Para un shooter de primera persona, crear equipos es particularmente importante porque establece estrategias de juego complejas y coordinadas más allá del conjunto de habilidades de cualquier jugador individual.
Usando la experiencia de etiqueta láser como referencia, esta sección del tutorial te enseña cómo agrupar a los jugadores en equipos, incluyendo la guía de scripts sobre:
- Usando 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 los indicadores de equipo en la pantalla y en la experiencia.
- Activar el juego perdonador que no castiga a los jugadores por arrojar a sus compañeros de equipo.
Después de completar esta sección, aprenderá sobre los scripts que permiten a los jugadores generar o reaparecer en una zona de lobby neutral o de equipo, personalizar los visuales del campo de fuerza en primera persona y manejar el estado del cliente tanto desde el servidor como del cliente.
Asignar Colores de Equipo
La experiencia de etiqueta láser utilizando el servicio Teams como base para crear dos equipos porque el servicio ofrece un comportamiento de clasificación de equipos integrado que funciona ampliamente fuera de la caja. Por ejemplo, sin ningún esfuerzo de script adicional, el servicio maneja acciones como:
- Ordenar y equilibrar a los jugadores de forma uniforme en cada equipo.
- Agrupar a los jugadores en su equipo en la tabla de clasificación.
- Tinte los nombres de los jugadores en el espacio 3D a su color de equipo correspondiente.
- Genera jugadores en lugares de aparición distintos que solo su equipo puede acceso.
Debido a esta funcionalidad predeterminada, la muestra habilita el servicio Teams y luego usa dos objetos distintos de Team con diferentes valores de propiedades Class.Team.
Es importante notar el nombre exacto de BrickColor para la propiedad de Team.Color porque la experiencia usa este nombre
startSyncingTeamColor referencias Team.Color para que pueda asignar el color y el icono correctos para el indicador del equipo del jugador en la esquina inferior izquierda de su pantalla.
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 se ha ordenado a un jugador en un equipo, debe ser capaz de decodificar rápidamente qué equipo pertenece, y diferenciar entre sus aliados y miembros del equipo enemigo. Esta capacidad es importante, ya que la jugabilidad de un primer-persona shooter experience requiere que los jugadores tomen decisiones estratégicas rápidas mientras están en zonas de combate para que no se etiqueten y pierdan la ronda.
Para configurar a los jugadores para el hecho, la experiencia de etiqueta láser de muestra proporciona múltiples indicadores de equipo tanto en la pantalla como en el espacio 3D:
- Jugador Indicador – Personalizado on-screen UI que muestra el color y el íconodel equipo del jugador.
- Indicador de equipo – Personalizado en la interfaz de usuario que muestra el color del equipo del jugador.
- Leaderboard Indicator – Interfaz de usuario por defecto de los equipos en la pantalla que agrupa a los jugadores debajo del color de su equipo.
- Tinte de nombre – servicio de equipos por defecto en la interfaz de usuario que tintea el nombre del jugador por encima de su cabeza a su color de equipo.
No necesitas hacer ningún trabajo adicional para el indicador de tabla de clasificación o el tinte de nombre que se encuentra fuera de asignar los colores de equipo desde la sección anterior del tutorial, pero los indicadores personalizados de equipo requieren más esfuerzo de programación para mostrar los indicadores y excluir los indicadores enemigos cuando están detrás de paredes. Para obtener una explicación completa de los scripts que controlan el comportamiento personal
Desactivar fuego amigable
Mientras que algunas experiencias de primer personaje de los shooters castigan a los jugadores que hacen explotar a sus compañeros de equipo, la experiencia de etiqueta láser muestra más jugabilidad perdonadora al desactivar el desencadenaramigable. Esta decisión de diseño permite que todos solo aumenten la puntuación de su equipo, no la resten debido a accidentes de juego.
Para entender cómo implementa el ejemplo esta funcionalidad, examine cómo ServerScriptService > LaserBlastHandler > procesarTaggedPlayers > 2> onPlayerTagged2> manejos que hacen daño a los jugadores etiquetados. Cu
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)
Antes de que disminuya la salud, el script primero verifica si el jugador etiquetado está en el mismo equipo que el jugador que inició el bombardeo. Si están en el mismo equipo, el script ignora los datos de explosión por completo.
local character = playerTagged.Characterlocal isFriendly = playerBlasted.Team == playerTagged.Team-- Desactivar fuego desencadenarif isFriendly thenreturnend
Sin embargo, si el jugador etiquetado está en el equipo enemigo, el jugador toma la cantidad adecuada de daño según el introducirde blaster. Además, si el jugador toma suficiente daño para ser etiquetado, el script recompensa un punto al equipo del jugador que inició el bloqueo. Para obtener más información sobre cómo rastrear los puntos, consulte Agregar Rondas más tarde en el 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
Si usted fuera a probar la experiencia ahora mismo, todos los jugadores aparecerían aleatoriamente en cualquiera de las zonas de spawn en los extremos opuestos de la arena independientemente de qué equipo pertenezcan, lo que significa que cada equipo aparecería justo al lado de cada otro.
Para abordar este problema, la siguiente sección del tutorial te enseña sobre la lógica personalizada detrás de restringir el tiempo de generación de equipos a ciertos lugares de generación, manejar el estado del cliente mientras los jugadores salen del área de generación después de seleccionar su blaster y reaparecer los jugadores en su área de generación o zona de lobby cuando su salud alcanza cero.