De los tres equipos, los infiltrados desempeñarán el papel más singular en tu juego. Los infiltrados son sigilosos y comienzan el juego siendo invisibles. Aparecen con un fusil de tirador de cerrojo de alto daño y pueden realizar eliminaciones desde las sombras mientras se acercan sigilosamente a la base del defensor. Sin embargo, los infiltrados no siempre son invisibles, ya que al ser golpeados pierden temporalmente su invisibilidad, apareciendo y desapareciendo de la vista.
En este tutorial, también aprenderás a hacer que todos los infiltrados de un equipo parpadeen cuando uno de ellos esté dañado, o a conservar el parpadeo individual. Parpadear en equipo crea una experiencia más difícil para los infiltrados, pero fomenta un juego más cuidadoso.
Sigue estos pasos para aprender a hacer invisibles a los infiltrados cuando aparecen.
Cómo crear el Gestor de invisibilidad
Crea un nuevo dispositivo de Verse nombrado invisibility_manager utilizando el explorador de Verse y arrástralo hasta el nivel.
En la parte superior del archivo
invisibility_manager, añadeusing { /Fortnite.com/Characters }para obtener elfort_characterasociado a un jugador.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }En la definición de la clase
invisibility_manager, añade los siguientes campos:Una matriz editable de generadores de jugadores
PlayerSpawners. Esto rastreará los generadores de jugadores para los infiltrados y se utilizará para hacerlos invisibles cuando generen.invisibility_manager := class(creative_device): Logger:log = log{Channel := triad_invisibility_log_channel} # Matriz de generadores de jugadores para el equipo de infiltrados @editable PlayersSpawners:[]player_spawner_device = array{}Una lógica editable
IsVisibilityShared. Esto determinará si el parpadeo tras ser dañado ocurre para todos los infiltrados a la vez o solo para el jugador en cuestión.# Matriz de generadores de jugadores para el equipo de infiltrados @editable PlayersSpawners:[]player_spawner_device = array{} # Si la visibilidad de los infiltrados se comparte con los compañeros de equipo. @editable IsVisibilityShared:logic = trueUn float editable
VulnerableSecondsy un float editableFlickerRateSeconds. El primero controla cuánto tiempo parpadean los infiltrados tras ser dañados y el segundo controla la velocidad a la que se reproduce la animación de parpadeo.# Si la visibilidad de los infiltrados se comparte con los compañeros de equipo. @editable IsVisibilityShared:logic = true # Cuánto tiempo permanecen visibles los infiltrados tras ser dañados. @editable VulnerableSeconds:float = 3.0 # Indica la rapidez con la que los infiltrados parpadean tras recibir daño. @editable FlickerRateSeconds:float = 0.4Una matriz variable de equipos llamada
Teams. Lo utilizarás para comprobar si un jugador es un infiltrado.# Indica la rapidez con la que los infiltrados parpadean tras recibir daño. @editable FlickerRateSeconds:float = 0.4 # Matriz de todos los equipos en el juego. var Teams:[]team = array{}Un mapa de variables de
agentafloatllamadoPlayerVisibilitySeconds. Esto asigna a los agentes individuales el número de segundos de parpadeo que les quedan tras ser dañados.var Teams:[]team = array{} # Matriz de todos los equipos en el juego. var Teams:[]team = array{} # Mapa de jugadores a la cantidad de segundos que les quedan para seguir parpadeando. var PlayerVisibilitySeconds:[agent]float = map{}
En
OnBegin(), añade una simple sentencia de registro para verificar que el dispositivo se ha iniciado. Debes asegurarte de queinvisibility_managerse ejecuta después de que los equipos hayan sido equilibrados por la secuencia de comandostriad_infiltration_gamepara evitar que los jugadores del equipo equivocado acaben con invisibilidad. Para garantizarlo, iniciarásinvisibility_managerdesdetriad_infiltration_game, en lugar de hacer que el código se ejecute enOnBegin().OnBegin<override>()<suspends>:void= # Espera a que los equipos estén equilibrados antes de suscribirte a eventos que hagan invisibles a los jugadores. Logger.Print("Esperando a que se equilibren los equipos...")Añade un nuevo método
OnPlayerSpawn()a la definición de la claseinvisibility_manager. Quieres asegurarte de que los infiltrados sean invisibles siempre que aparezcan, así que primero te ocuparás de esta función.Verse# Handles a player spawning from an infiltrator spawn pad OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("A player just spawned from an infiltrator spawn pad!")En
OnPlayerSpawn(), obtén elfort_characterasociado al agente generado utilizandoGetFortCharacter[]y guárdalo en una variableFortCharacter. Además, obtén el equipo del agente generado utilizandoGetTeam[]y guárdalo en una variableCurrentTeam.Verse# Handles a player spawning from an infiltrator spawn pad OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("A player just spawned from an infiltrator spawn pad!") if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent]Comprueba si
CurrentTeamcoincide con el primer equipo de la matrizTeams, que deberían ser los infiltrados. Si es así, este agente es un infiltrado, y puedes llamar aHide()en elFortCharacterdel agente. Esto hará que el agente sea invisible cuando aparezca. Tu funciónOnPlayerSpawn()debería tener el siguiente aspecto:Verse# Handles a player spawning from an infiltrator spawn pad OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("A player just spawned from an infiltrator spawn pad!") if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent] Teams[0] = CurrentTeam Logger.Print("Player spawned as an infiltrator, making them invisible") then: FortCharacter.Hide()
Añade un nuevo método
StartInvisibilityManager()a la definición de la claseinvisibility_manager. Esta función toma una matriz de tipo equipoAllTeams, una matriz de tipo jugadorAllPlayersy una referencia al equipo de infiltrados de tipoteam. La llamarás desdetriad_infiltration_gamepara iniciar la lógica deinvisibility_manager, así que esta función debe tener el especificador<public>para quetriad_infiltration_gamepueda encontrarla.# Inicia la lógica del gestor de invisibilidad. Se llama desde la clase triad_infiltration tras equilibrar los equipos. StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("¡Secuencia de comandos de invisibilidad iniciada!")En
StartInvisibilityManager():Establece la matriz
Teamsen la matrizAllTeams.# Inicia la lógica del gestor de invisibilidad. Se llama desde la clase triad_infiltration tras equilibrar los equipos. StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("¡Secuencia de comandos de invisibilidad iniciada!") set Teams = AllTeamsEn un bucle
for, suscribe cada generador de jugadores enPlayerSpawnersa tu funciónOnPlayerSpawn().for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)Cuando se inicie la secuencia de comandos, debes encontrar a cada infiltrado y hacerlo invisible. También debes crear una entrada para ellos en tu mapa
PlayerVisibilitySeconds. Lo utilizarás más adelante para saber durante cuánto tiempo debe parpadear cada infiltrado dañado. Como enOnPlayerSpawn(), obtén elfort_charactery elteamde cada jugador.Versefor(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # For each player, if they spawned on the infiltrator team, spawn an OnInfiltratorDamaged function for that # player. Then make their character invisible. for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer]Comprueba si
CurrentTeamcoincide con el equipoInfiltratorsque pasaste a esta función. Si es así, establece la clave del jugador enPlayerVisibilitySecondsen0.0.Versefor(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer] Logger.Print("Got this player's current team") Infiltrators = CurrentTeam set PlayerVisibilitySeconds[TeamPlayer] = 0.0 Logger.Print("Added player to PlayerVisibilitySeconds")Por último, haz invisible al jugador llamando a
Hide()en elFortCharacterdel jugador. TuStartInvisibilityManagerdebería tener el siguiente aspecto:Verse# Starts the invisibility manager logic. Called from triad_infiltration class after team balancing finishes StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Invisibility script started!") set Teams = AllTeams for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # For each player, if they spawned on the infiltrator team, spawn an OnInfiltratorDamaged function for that # player. Then make their character invisible. for(TeamPlayer:AllPlayers):
Cómo llamar al Gestor de invisibilidad del juego Infiltración a tres bandas
De nuevo en
triad_infiltration_game, añade uninvisibility_managereditable a la definición de la clase. Este será el dispositivo de tu nivel al que llame tu dispositivotriad_infiltration_game.# Referencia a la secuencia de comandos invisibility_manager que controla la invisibilidad del infiltrado. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}En la función
OnBegin(), después de la llamada aBalanceTeams(), llama aStartInvisibilityManager(), pasandoTeams,AllPlayerseInfiltrators. Tu funciónOnBegin()debería tener el siguiente aspecto:VerseOnBegin<override>()<suspends>:void = # Get all the Teams set Teams = GetPlayspace().GetTeamCollection().GetTeams() # Save the teams to later reference them set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]} if: Infiltrators := MaybeInfiltrators?Guarda los archivos y compílalos. Selecciona el dispositivo en el esquematizador y asigna las plataformas de aparición de los infiltrados a la matriz PlayerSpawners.
Selecciona tu dispositivo triad_infiltration_game en el esquematizador y asigna tu dispositivo invisibility_manager a su propiedad InvisibilityManager.
Haz clic en Abrir sesión en la barra de herramientas de UEFN para probar el nivel.
Cuando pruebes tu nivel, cada jugador debe acabar en el equipo con mayor diferencia, y debe aparecer con un arma apropiada para su equipo. Cada infiltrado debe ser invisible, tanto al comenzar el juego como al reaparecer.
Siguiente paso
En el siguiente paso de este tutorial, aprenderás a hacer que el personaje de un infiltrado parpadee cuando esté dañado.