Des trois équipes, les infiltrés joueront le rôle le plus unique dans votre jeu. Les infiltrés sont discrets et commencent le jeu en étant invisibles. Ils apparaissent avec un fusil d'assaut au coup par coup extrêmement puissant et peuvent éliminer des adversaires grâce aux ombres pendant qu'ils se faufilent vers la base du défenseur. Les infiltrés ne sont pas toujours invisibles, cependant, car ils apparaissent et disparaissent de manière intermittente lorsqu'ils subissent des dégâts.
Dans ce tutoriel, vous apprendrez également à faire clignoter un infiltré ayant subi des dégâts ou à appliquer ce clignotement à l'ensemble de son équipe. Le clignotement de toute l'équipe crée une expérience plus difficile pour les infiltrés et les incite à davantage de prudence.
Suivez ces étapes pour apprendre comment rendre les infiltrés invisibles lorsqu'ils apparaissent.
Créer le gestionnaire d'invisibilité
Créez un nouvel appareil Verse nommé invisibility_manager à l'aide de l'explorateur Verse, puis faites-le glisser dans le niveau.
En haut du fichier
invisibility_manager, ajoutezusing { /Fortnite.com/Characters }pour obtenir lefort_characterassocié à un joueur.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }Dans la définition de classe
invisibility_manager, ajoutez les champs suivants :Une matrice modifiable de points d'apparition de joueurs
PlayerSpawners. Cela permettra de suivre les points d'apparition des joueurs pour les infiltrés et sera utilisé pour les rendre invisibles lorsqu'ils apparaissentinvisibility_manager := class(creative_device): Logger:log = log{Channel := triad_invisibility_log_channel} # Matrice des points d'apparition de joueurs de l'équipe des infiltrés @editable PlayersSpawners:[]player_spawner_device = array{}Une logique modifiable
IsVisibilityShared. Elle détermine si les clignotements après avoir subi des dégâts se produisent pour tous les infiltrés simultanément ou seulement pour le joueur touché.# Matrice des points d'apparition de joueurs de l'équipe des infiltrés @editable PlayersSpawners:[]player_spawner_device = array{} # Si la visibilité des infiltrés est partagée avec les coéquipiers. @editable IsVisibilityShared:logic = trueUn float modifiable
VulnerableSecondset un float modifiableFlickerRateSeconds. Le premier contrôle la durée pendant laquelle les infiltrés clignotent après avoir subi des dégâts, et le second contrôle la vitesse d'animation du clignotement.# Indique si la visibilité des infiltrés est partagée avec les coéquipiers. @editable IsVisibilityShared:logic = true # Combien de temps les infiltrés restent visibles après avoir subi des dégâts. @editable VulnerableSeconds:float = 3.0 # Vitesse de clignotement des infiltrés après qu'ils ont subi des dégâts. @editable FlickerRateSeconds:float = 0.4Une matrice d'équipe variable nommée
Teams. Vous l'utiliserez pour vérifier si un joueur est un infiltré.# Vitesse de clignotement des infiltrés après qu'ils ont subi des dégâts. @editable FlickerRateSeconds:float = 0.4 # Matrice de l'ensemble des équipes du jeu. var Teams:[]team = array{}Un mappage variable d'
agentsurfloatappeléPlayerVisibilitySeconds. Il associe les agents individuels au nombre de secondes de clignotement restantes après qu'ils ont subi des dégâts.var Teams:[]team = array{} # Matrice de l'ensemble des équipes du jeu. var Teams:[]team = array{} # Mappage des joueurs au nombre de secondes qu'il leur reste à clignoter. var PlayerVisibilitySeconds:[agent]float = map{}
Dans
OnBegin(), ajoutez une simple instruction de journal pour vérifier que l'appareil a démarré. Vous voulez vous assurer queinvisibility_managers'exécute après que les équipes ont été équilibrées par le scripttriad_infiltration_gameafin d'éviter que les joueurs de l'équipe incorrecte ne se retrouvent invisibles. Pour cela, vous allez démarrerinvisibility_managerà partir detriad_infiltration_game, plutôt que d'exécuter le code dansOnBegin().OnBegin<override>()<suspends>:void= # Attendre que les équipes soient équilibrées avant l'inscription aux événements qui rendent les joueurs invisibles. Logger.Print("Waiting for teams to be balanced...")Ajoutez une nouvelle méthode
OnPlayerSpawn()à la définition de classeinvisibility_manager. Dans la mesure où vous souhaitez que les infiltrés soient invisibles chaque fois qu'ils apparaissent, vous devez vous occuper de cette fonction en premier.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!")Dans
OnPlayerSpawn(), obtenez lefort_characterassocié à l'agent apparu en utilisantGetFortCharacter[]et enregistrez-le dans une variableFortCharacter. Obtenez également l'équipe de l'agent apparu en utilisantGetTeam[]et enregistrez-la dans une 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]Vérifiez si
CurrentTeamcorrespond à la première équipe dans la matriceTeams, qui devrait être celle des infiltrés. Si c'est le cas, cet agent est un infiltré, et vous pouvez appelerHide()sur leFortCharacterde l'agent. Cela rendra l'agent invisible lorsqu'il apparaîtra. Votre fonctionOnPlayerSpawn()doit être similaire à ce qui suit :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()
Ajoutez une nouvelle méthode
StartInvisibilityManager()à la définition de classeinvisibility_manager. Cette fonction prend une matrice de type équipeAllTeams, une matrice de type joueurAllPlayerset une référence à l'équipe des infiltrés de typeteam. Vous appellerez cette fonction depuistriad_infiltration_gamepour démarrer la logique deinvisibility_manager; cette fonction doit par conséquent avoir le spécificateur<public>pour permettre àtriad_infiltration_gamede la trouver.# Démarre la logique du gestionnaire d'invisibilité. Appelé par la classe triad_infiltration une fois l'équilibrage des équipes terminé StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("Invisibility script started!")Dans
StartInvisibilityManager():Configurez la matrice
Teamscomme étant la matriceAllTeams.# Démarre la logique du gestionnaire d'invisibilité. Appelé par la classe triad_infiltration une fois l'équilibrage des équipes terminé StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Invisibility script started!") set Teams = AllTeamsDans une boucle
for, abonnez chaque point d'apparition de joueur dansPlayerSpawnersà votre fonctionOnPlayerSpawn().for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)Quand le script démarre, vous voulez trouver chaque infiltré et le rendre invisible. Vous souhaitez également créer une entrée pour eux dans votre mappage
PlayerVisibilitySeconds. Vous l'utiliserez plus tard pour garder le suivi de la durée de clignotement de chaque infiltré ayant subi des dégâts. Tout comme dansOnPlayerSpawn(), obtenezfort_characteretteampour chaque joueur.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]Vérifiez si
CurrentTeamcorrespond à l'équipeInfiltratorsque vous avez transmise à cette fonction. Si tel est le cas, définissez la clé du joueur dansPlayerVisibilitySecondssur0,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")Enfin, rendez le joueur invisible en appelant
Hide()sur leFortCharacterdu joueur. VotreStartInvisibilityManagerdoit être similaire à ce qui suit :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):
Appeler le gestionnaire d'invisibilité du mode de jeu d'infiltration à trois équipes
De retour dans
triad_infiltration_game, ajoutez uninvisibility_managermodifiable à la définition de classe. Il s'agit de l'appareil dans votre niveau que votre appareiltriad_infiltration_gameappelle.# Référence au script invisibility_manager qui contrôle l'invisibilité des infiltrés. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}Dans la fonction
OnBegin()après l'appel deBalanceTeams(), appelezStartInvisibilityManager(), en transmettantTeams,AllPlayersetInfiltrators. Votre fonctionOnBegin()doit être similaire à ce qui suit :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?Sauvegardez les fichiers et compilez-les. Sélectionnez l'appareil dans l'organiseur et attribuez les points d'apparition des infiltrés à la matrice PlayerSpawners.
Sélectionnez votre appareil triad_infiltration_game dans l'organiseur, et attribuez votre appareil invisibility_manager à sa propriété InvisibilityManager.
Cliquez sur Lancer la session dans la barre d'outils de l'UEFN pour tester le niveau.
Lorsque vous testez votre niveau, chaque joueur devrait finir dans l'équipe présentant la plus grande différence et apparaître avec une arme appropriée pour leur équipe. Chaque infiltré doit être invisible, à la fois lorsque la partie commence et lorsqu'ils réapparaissent.
Étape suivante
À l'étape suivante de ce tutoriel, vous apprendrez à faire clignoter un infiltré lorsqu'il subit des dégâts.