Von den drei Teams haben die Infiltratoren die außergewöhnlichste Rolle in deinem Spiel. Die Infiltratoren sind getarnt und beginnen das Spiel unsichtbar. Sie spawnen mit einem Repetiergewehr mit hohem Schadenspotential und können aus dem Verborgenen andere Spieler eliminieren, während sie sich an die Basis des Verteidigers heranschleichen. Die Infiltratoren sind jedoch nicht immer unsichtbar, denn wenn sie getroffen werden, verlieren sie vorübergehend ihre Unsichtbarkeit und flackern auf und ab.
In diesem Tutorial lernst du auch, wie du alle Infiltratoren eines Teams zum Flackern bringst, wenn einer von ihnen beschädigt wird, oder wie du einen einzelnen Spieler flackern lässt. Das Flackern im Team macht es für die Infiltratoren schwieriger, ermutigt aber auch zu vorsichtigerem Spiel.
Folge diesen Schritten, um zu lernen, wie man Infiltratoren unsichtbar macht, wenn sie spawnen.
Erstellen des Unsichtbarkeitsmanagers
Erstelle mit Verse Explorer ein neues Verse-Gerät mit dem Namen invisibility_manager und ziehe das Gerät in das Level.
Füge oben in der Datei
invisibility_managerusing { /Fortnite.com/Characters }hinzu, um den mit einem Spieler verbundenenfort_characterzu erhalten.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }Füge in der Klassendefinition
invisibility_managerdie folgenden Felder hinzu:Ein bearbeitbares Array von Spieler-Spawnern
PlayerSpawners. Dies wird die Spieler-Spawners für die Infiltratoren verfolgen und wird verwendet werden, um sie unsichtbar zu machen, wenn sie spawneninvisibility_manager := class(creative_device): Logger:log = log{Channel := triad_invisibility_log_channel} # Array von Spieler-Spawner für das Infiltrator-Team. @editable PlayersSpawners:[]player_spawner_device = array{}Eine bearbeitbare Logik
IsVisibilityShared. Damit wird festgelegt, ob das Flackern nach einer Beschädigung bei allen Infiltratoren gleichzeitig auftritt oder nur bei dem Spieler, der beschädigt wurde.# Array von Spieler-Spawnern für das Infiltrator-Team @editable PlayersSpawners:[]player_spawner_device = array{} # Ob die Sichtbarkeit der Infiltratoren mit Teamkameraden geteilt wird. @editable IsVisibilityShared:logic = trueEin bearbeitbarer Float
VulnerableSecondsund ein bearbeitbarer FloatFlickerRateSeconds. Der erste steuert, wie lange Infiltratoren flackern, nachdem sie getroffen wurden, und der zweite, wie schnell die Flackeranimation abgespielt wird.# Ob die Sichtbarkeit der Infiltratoren mit Teamkameraden geteilt wird. @editable IsVisibilityShared:logic = true # Wie lange die Infiltratoren sichtbar sind, nachdem sie getroffen wurden. @editable VulnerableSeconds:float = 3.0 # Wie schnell die Infiltratoren flackern, nachdem sie beschädigt wurden. @editable FlickerRateSeconds:float = 0.4Ein variables Team-Array namens
Teams. Damit kannst du überprüfen, ob ein Spieler ein Infiltrator ist.# Wie schnell die Infiltratoren flackern, nachdem sie beschädigt wurden. @editable FlickerRateSeconds:float = 0.4 # Array aller Teams im Spiel var Teams:[]team = array{}Eine variable Map von
agentzufloatnamensPlayerVisibilitySeconds. Damit wird den einzelnen Agenten die Anzahl der Sekunden zugeordnet, die sie nach einem Treffer noch flackern.var Teams:[]team = array{} # Array aller Teams im Spiel var Teams:[]team = array{} # Map der Spieler mit der Anzahl der Sekunden, die sie noch blinken können. var PlayerVisibilitySeconds:[agent]float = map{}
Füge in
OnBegin()eine einfache Log-Anweisung hinzu, um zu überprüfen, ob das Gerät gestartet wurde. Du willst sicherstellen, dassinvisibility_managerausgeführt wird, nachdem die Teams durch das Scripttriad_infiltration_gameausgeglichen wurden, um zu verhindern, dass Spieler im falschen Team mit Unsichtbarkeit enden. Um dies zu gewährleisten, startest duinvisibility_managervontriad_infiltration_game, anstatt Code inOnBegin()auszuführen.OnBegin<override>()<suspends>:void= # Wartet, bis die Teams ausbalanciert sind, bevor Events abonniert werden, die die Spieler unsichtbar machen. Logger.Print("Warten, bis die Teams ausbalanciert sind...")Füge eine neue Methode
OnPlayerSpawn()zur Definition der Klasseinvisibility_managerhinzu. Du willst, dass die Infiltratoren unsichtbar sind, wenn sie spawnen, also führst du diese Funktion zuerst aus.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!")In
OnPlayerSpawn()wird der mit dem gespawnten Agenten assoziiertefort_charactermithilfe vonGetFortCharacter[]abgerufen und in einer VariablenFortCharactergespeichert. Hole außerdem das Team des gespawnten Agenten mitGetTeam[]und speichere es in einer VariablenCurrentTeam.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]Überprüfe, ob
CurrentTeammit dem ersten Team im FeldTeamsübereinstimmt, was die Infiltratoren sein sollten. Wenn dies der Fall ist, ist dieser Agent ein Infiltrator und du kannstHide()auf demFortCharacterdes Agenten aufrufen. Dadurch wird der Agent unsichtbar, wenn er spawnt. DeineOnPlayerSpawn()-Funktion sollte wie folgt aussehen: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()
Füge eine neue Methode
StartInvisibilityManager()zur Definition der Klasseinvisibility_managerhinzu. Diese Funktion benötigt ein Array vom Typ TeamAllTeams, ein Array vom Typ SpielerAllPlayersund einen Verweis auf das Infiltrator-Team vom Typteam. Du wirst diese Funktion vontriad_infiltration_gameaufrufen, um dieinvisibility_manager-Logik zu starten, also muss diese Funktion den Bezeichner<public>haben, damittriad_infiltration_gamesie finden kann.# Startet die Unsichtbarkeitsmanagerlogik. Aufgerufen von der Klasse triad_infiltration nach Abschluss des Teamausgleichs StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("Unsichtbarkeitsscript gestartet!")In
StartInvisibilityManager():Setze das Array
Teamsauf das ArrayAllTeams.# Startet die Unsichtbarkeitsmanagerlogik. Aufgerufen von der Klasse triad_infiltration nach Abschluss des Teamausgleichs StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Unsichtbarkeitsscript gestartet!") set Teams = AllTeamsAbonniere in einer
for-Schleife jeden Spieler-Spawner inPlayerSpawnersfür deineOnPlayerSpawn()-Funktion.for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)Wenn das Script startet, soll jeder Infiltrator gefunden und unsichtbar gemacht werden. Außerdem soll ein Eintrag für sie in der Map
PlayerVisibilitySecondserstellt werden. Damit kannst du später verfolgen, wie lange jeder getroffene Infiltrator flackern sollte. Hole genau wie inOnPlayerSpawn()denfort_characterund dasteamfür jeden Spieler.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]Überprüfe, ob
CurrentTeammit dem TeamInfiltratorsübereinstimmt, das du an diese Funktion übergeben hast. Wenn ja, setze den Schlüssel des Spielers inPlayerVisibilitySecondsauf0.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")Zum Schluss machst du den Spieler unsichtbar, indem du
Hide()für denFortCharacterdes Spielers aufrufst. DeinStartInvisibilityManagersollte wie folgt aussehen: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):
Aufruf des Unsichtbarkeitsmanagers aus dem Triad Infiltration Game
Füge in
triad_infiltration_gameeinen bearbeitbareninvisibility_managerin die Klassendefinition ein. Dies wird das Gerät in deinem Level sein, das deintriad_infiltration_game-Gerät aufruft.# Referenz auf das invisibility_manager-Script, das die Unsichtbarkeit des Infiltrators steuert. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}Rufe in der Funktion
OnBegin()nach dem Aufruf vonBalanceTeams()StartInvisibilityManager()auf und übergebe dabeiTeams,AllPlayersundInfiltrators. DeineOnBegin()-Funktion sollte wie folgt aussehen: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?Speichere die Dateien und kompiliere sie. Wähle das Gerät im Outliner aus und weise alle Spawnflächen für die Infiltratoren dem Feld PlayerSpawners zu.
Wähle dein triad_infiltration_game-Gerät im Outliner aus und weise ihm die InvisibilityManager-Eigenschaft zu.
Klicke auf Sitzung starten in der UEFN-Symbolleiste, um den Level einen Spieltest durchzuführen.
Wenn du dein Level testest, sollte jeder Spieler in dem Team mit der größten Differenz landen und mit einer passenden Waffe für sein Team spawnen. Jeder Infiltrator sollte unsichtbar sein, sowohl zu Beginn des Spiels als auch wenn er wieder auftaucht.
Nächster Schritt
Im nächsten Schritt dieses Tutorials lernst du, wie man den Charakter eines Infiltrators flackern lässt, wenn er getroffen wird.