De los tres equipos, los infiltrados desempeñarán el papel más singular en tu juego. Los infiltrados son sigilosos y al comienzo de la partida son invisibles. Aparecen con un rifle de cerrojo que provoca un gran daño y pueden realizar eliminaciones desde las sombras mientras se acercan con sigilo a la base del defensor. Sin embargo, los infiltrados no siempre son invisibles, ya que si son impactados pierden su invisibilidad de forma temporal, y aparecen y desaparecen de la vista con un efecto de parpadeo.
En este tutorial, también aprenderás a lograr que todos los infiltrados de un equipo parpadeen cuando se daña a uno de ellos, o a mantener 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 administrador de invisibilidad
Crea un nuevo dispositivo de Verse denominado invisibility_manager con el explorador de Verse, y arrastra el dispositivo al nivel.
En la parte superior del archivo
invisibility_manager, añadeusing { /Fortnite.com/Characters }para obtener elfort_characterque se asocia con 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 apariciones de jugadores
PlayerSpawners. Esto rastreará las apariciones de jugadores para los infiltrados y se utilizará para hacerlos invisibles cuando aparezcan.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 después del daño ocurre para todos los infiltrados al mismo tiempo o solo para el jugador dañado.# Matriz de generadores de jugadores para el equipo de infiltrados @editable PlayersSpawners:[]player_spawner_device = array{} # Determina 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 después del daño y el segundo controla la velocidad a la que se reproduce la animación de parpadeo.# Determina si la visibilidad de los infiltrados se comparte con los compañeros de equipo. @editable IsVisibilityShared:logic = true # Por cuánto tiempo son visibles los infiltrados después del daño. @editable VulnerableSeconds:float = 3.0 # Qué tan rápido parpadean los infiltrados después de recibir daño. @editable FlickerRateSeconds:float = 0.4Una matriz variable de equipos llamado
Teams. Se utilizará para comprobar si un jugador es un infiltrado.# Qué tan rápido parpadean los infiltrados después de recibir daño. @editable FlickerRateSeconds:float = 0.4 # Matriz de todos los equipos del juego. var Teams:[]team = array{}Una asignación de variables de
agentafloatllamadaPlayerVisibilitySeconds. Esto asigna a agentes individuales el número de segundos de parpadeo que les quedan después del daño.var Teams:[]team = array{} # Matriz de todos los equipos del juego. var Teams:[]team = array{} # Mapa de jugadores con la cantidad de segundos que les quedan para seguir parpadeando. var PlayerVisibilitySeconds:[agent]float = map{}
En
OnBegin(), agrega una declaración de registro simple para verificar que el dispositivo se haya iniciado. Querrás asegurarte de queinvisibility_managerse ejecute después de que la secuenciatriad_infiltration_gameequilibre los equipos para evitar que se invisibilice a los jugadores del equipo incorrecto. Para garantizar esto, iniciarásinvisibility_managerdesdetriad_infiltration_game, en lugar de ejecutar el código 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 los equipos estén equilibrados...")Añade un nuevo método
OnPlayerSpawn()a la definición de la claseinvisibility_manager. Querrás asegurarte de que los infiltrados sean invisibles cuando aparezcan, por lo que en primer lugar 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(), asociafort_charactercon el agente que apareció a través deGetFortCharacter[]y guárdalo en una variableFortCharacter. Además, consigue a través deGetTeam[]el equipo del agente que apareció 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()debe verse de la siguiente manera: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 obtiene una matriz de tipo equipoAllTeams, una matriz de tipo jugadorAllPlayersy una referencia al equipo de Infiltrados de tipoteam. Llamarás a esta función desdetriad_infiltration_gamepara iniciar la lógicainvisibility_manager, por lo que debe tener el especificador<public>para quetriad_infiltration_gamela encuentre.# Inicia la lógica del administrador de invisibilidad. Se llama desde la clase triad_infiltration una vez finalizado el equilibrio de equipos. StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("Invisibility script started!")En
StartInvisibilityManager():Establece la matriz
Teamsen la matrizAllTeams.# Inicia la lógica del administrador de invisibilidad. Se llama desde la clase triad_infiltration una vez finalizado el equilibrio de equipos. StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Invisibility script started!") set Teams = AllTeamsEn un bucle
for, suscribe cada plataforma de aparición enPlayerSpawnersa tu funciónOnPlayerSpawn().for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)Cuando se inicie la secuencia de comandos, deberás encontrar a cada infiltrado y hacerlo invisible. También querrás crear una entrada para ellos en tu mapa
PlayerVisibilitySeconds. Lo usarás más tarde para saber durante cuánto tiempo debe parpadear cada infiltrado dañado. Al igual que 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 enPlayerVisibilitySecondsa0.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. TuStartInvisibilityManagerdebe verse de la siguiente manera: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 administrador de invisibilidad del juego de infiltración de triada
De vuelta en
triad_infiltration_game, agrega uninvisibility_managereditable a la definición de la clase. Este será el dispositivo en tu nivel que tu dispositivotriad_infiltration_gamellame.# Referencia a la secuencia de comandos de invisibility_manager que controla la invisibilidad del infiltrado. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}En la función
OnBegin()luego de la llamada aBalanceTeams(), llama aStartInvisibilityManager(), y pasaTeams,AllPlayerseInfiltrators. Tu funciónOnBegin()debe verse de la siguiente manera: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 agrúpalos. Selecciona el dispositivo en el esquematizador y asigna cualquier plataforma de aparición para los infiltrados en 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 Comenzar sesión en la barra de herramientas de UEFN para realizar una prueba de juego del nivel.
Cuando realices la prueba del nivel, cada jugador debería acabar en el equipo con mayor diferencia y debería aparecer con un arma apropiada para su equipo. Cada Infiltrado debe ser invisible, tanto al inicio de la partida como al reaparecer.
Próximo paso
En el siguiente paso de este tutorial, aprenderás a hacer que el personaje de un infiltrado parpadee cuando lo dañan.