Das três equipes, os infiltradores desempenharão o papel mais distinto no jogo. Os infiltradores são furtivos e começam o jogo invisíveis. Eles surgem com um rifle de ferrolho de alto dano e podem executar eliminações nas sombras enquanto se esgueiram em direção à base dos defensores. No entanto, os infiltradores nem sempre permanecem invisíveis, pois o ato de serem atingidos faz com que percam a invisibilidade temporariamente, piscando entre os estados visível e invisível.
Neste tutorial, você também aprenderá a fazer com que todos os infiltradores de uma equipe pisquem quando um deles receber dano ou a manter a cintilação individual. A cintilação em equipe cria uma experiência mais difícil para os infiltradores, mas incentiva uma estratégia mais cuidadosa.
Siga estas etapas para aprender a tornar os infiltradores invisíveis ao surgirem.
Como criar o gerenciador de invisibilidade
Crie um novo dispositivo Verse denominado invisibility_manager usando o Explorador do Verse e arraste o dispositivo para o nível.
Na parte superior do arquivo
invisibility_manager, adicioneusing { /Fortnite.com/Characters }para obter ofort_characterassociado a um jogador.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }Na definição da classe
invisibility_manager, adicione os seguintes campos:Uma matriz editável de geradores de jogador
PlayerSpawners. Ela rastreará os geradores de jogadores em busca de infiltradores e será usada para torná-los invisíveis ao surgirem.invisibility_manager := class(creative_device): Logger:log = log{Channel := triad_invisibility_log_channel} # A matriz de geradores de jogadores para a equipe de infiltradores @editable PlayersSpawners:[]player_spawner_device = array{}Uma lógica editável
IsVisibilityShared. Ela determinará se a cintilação após o dano ocorre para todos os infiltradores ao mesmo tempo ou apenas para o jogador que sofreu dano.# A matriz de geradores de jogadores para a equipe de infiltradores @editable PlayersSpawners:[]player_spawner_device = array{} # Se a visibilidade dos infiltradores é ou não compartilhada com colegas de equipe @editable IsVisibilityShared:logic = trueUm float editável
VulnerableSecondse um float editávelFlickerRateSeconds. O primeiro controla por quanto tempo os infiltradores piscam depois de sofrerem dano, e o segundo controla a velocidade com que a animação de cintilação é reproduzida.# Se a visibilidade dos infiltradores é ou não compartilhada com colegas de equipe. @editable IsVisibilityShared:logic = true # Por quanto tempo os infiltradores ficam visíveis depois de receberem dano @editable VulnerableSeconds:float = 3.0 # A rapidez com que os infiltradores cintilam depois de receberem dano. @editable FlickerRateSeconds:float = 0.4Uma matriz de equipe variável denominada
Teams. Você a usará para verificar se um jogador é um infiltrador.# A rapidez com que os infiltradores cintilam depois de receberem dano. @editable FlickerRateSeconds:float = 0.4 # A matriz de todas as equipes do jogo. var Teams : []team = array{}Um mapa variável de
agentparafloatdenominadoPlayerVisibilitySeconds. Mapeia agentes individuais de acordo com o número de segundos de cintilação que resta a eles após sofrerem dano.var Teams:[]team = array{} # A matriz de todas as equipes do jogo. var Teams : []team = array{} # O mapa de jogadores para a quantidade de segundos restantes para eles continuarem cintilando. var PlayerVisibilitySeconds:[agent]float = map{}
Em
OnBegin(), adicione uma instrução de log simples para verificar se o dispositivo foi iniciado. Certifique-se de queinvisibility_managerseja executado depois que as equipes forem distribuídas pelo scripttriad_infiltration_gamepara evitar que os jogadores da equipe errada fiquem invisíveis. Para isso, você iniciaráinvisibility_manageremtriad_infiltration_game, em vez de executar o código emOnBegin().OnBegin<override>()<suspends>:void= # Esperar que as equipes se distribuam antes de assinar eventos que tornem os jogadores invisíveis Logger.Print("Aguardando a distribuição das equipes...")Adicione um novo método
OnPlayerSpawn()à definição de classeinvisibility_manager. Como você deseja garantir que os infiltradores fiquem invisíveis sempre que surgirem, precisará lidar com essa função primeiro.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!")Em
OnPlayerSpawn(), obtenha ofort_characterassociado ao agente gerado usandoGetFortCharacter[]e salve-o em uma variávelFortCharacter. Além disso, obtenha a equipe do agente gerado usandoGetTeam[]e salve-a em uma variávelCurrentTeam.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]Verifique se
CurrentTeamcorresponde à primeira equipe na matrizTeams, que deve ser os Infiltradores. Nesse caso, esse agente é um infiltrador, e você pode chamarHide()emFortCharacterdo agente. Essa ação tornará o agente invisível quando ele surgir. Sua funçãoOnPlayerSpawn()deve ter a seguinte aparência: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()
Adicione um novo método
StartInvisibilityManager()à definição de classeinvisibility_manager. Essa função recebe uma matriz do tipo equipeAllTeams, uma matriz do tipo jogadorAllPlayerse uma referência à equipe Infiltradores do tipoteam. Você à chamará detriad_infiltration_gamepara iniciar a lógica deinvisibility_manager. Portanto, essa função deve ter o especificador<public>para permitir quetriad_infiltration_gamea encontre.# Inicia a lógica do gerenciador de invisibilidade. Chamada da classe triad_infiltration após o término do equilíbrio de equipes StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("Script de invisibilidade iniciado!")Em
StartInvisibilityManager():Defina a matriz
Teamspara a matrizAllTeams.# Inicia a lógica do gerenciador de invisibilidade. Chamada da classe triad_infiltration após o término do equilíbrio de equipes StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Script de invisibilidade iniciado!") set Teams = AllTeamsEm um loop
for, inscreva os geradores de jogadores emPlayerSpawnerspara a funçãoOnPlayerSpawn().for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)Quando o script é iniciado, você deve encontrar cada infiltrador e torná-lo invisível. Você também deve criar uma entrada para cada um no mapa
PlayerVisibilitySeconds. Isso será usado mais tarde para rastrear por quanto tempo cada infiltrador que sofreu dano deve piscar. Assim como emOnPlayerSpawn(), obtenhafort_charactereteampara cada jogador.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]Verifique se
CurrentTeamcorresponde à equipeInfiltratorstransmitida para esta função. Nesse caso, defina a chave do jogador emPlayerVisibilitySecondscomo0,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")Finalmente, deixe o jogador invisível chamando
Hide()noFortCharacterdo jogador. SeuStartInvisibilityManagerdeve ter a seguinte aparência: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):
Como chamar o gerenciador de invisibilidade do jogo de Infiltração da Tríade
Voltando a
triad_infiltration_game, adicione uminvisibility_managereditável à definição de classe. Este será o dispositivo no seu nível que o seu dispositivotriad_infiltration_gamechama.# A referência ao script invisibility_manager que controla a invisibilidade do infiltrador. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}Na função
OnBegin()após a chamada paraBalanceTeams(), chameStartInvisibilityManager(), transmitindoTeams,AllPlayerseInfiltrators. Sua funçãoOnBegin()deve ter a seguinte aparência: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?Salve os arquivos e compile-os. Selecione o dispositivo no Organizador e atribua quaisquer plataformas de surgimento dos infiltradores à matriz PlayerSpawners.
Selecione o dispositivo triad_infiltration_game no Organizador e atribua o dispositivo invisibility_manager à propriedade InvisibilityManager.
Clique em Iniciar Sessão na barra de ferramentas do UEFN para testar o nível.
Quando você testar o nível, os jogadores deverão ser atribuídos à equipe com a maior diferença e deverão surgir com a arma correta dessa equipe. Os infiltradores deverão estar invisíveis quando o jogo começar e também quando ressurgirem.
Próximo passo
Na próxima etapa deste tutorial, você aprenderá a cintilar o personagem de um infiltrador quando ele for danificado.