Ze wszystkich trzech drużyn to infiltratorzy będą odgrywali w twojej grze najbardziej unikatową rolę. Infiltratorzy skradają się i rozpoczynają grę niewidoczni. Spawnują się z karabinem czterotaktowym zadającym poważne obrażenia i mogą zaliczać likwidacje z ukrycia, gdy podkradają się w stronę bazy obrońców. Infiltratorzy nie pozostają jednak niewidoczni przez cały czas, gdyż w chwili trafienia tymczasowo tracą niewidoczność i zaczynają migotać, naprzemiennie pojawiając się i znikając.
W tym samouczku dowiesz się również, jak skonfigurować migotanie każdego infiltratora należącego do drużyny, gdy jeden z jej członków dozna obrażeń, lub ograniczyć migotanie do konkretnego gracza. Migotanie całej drużyny utrudnia rozgrywkę dla infiltratorów, ale jednocześnie zachęca ich do większej ostrożności.
Poniższa procedura ilustruje, w jaki sposób ustawić niewidoczność infiltratorów w chwili ich spawnu.
Tworzenie menedżera niewidoczności
Utwórz nowe urządzenie Verse o nazwie invisibility_manager za pomocą Eksploratora Verse i przeciągnij je do poziomu.
U góry pliku
invisibility_managerdodajusing { /Fortnite.com/Characters }, aby pobrać elementfort_characterpowiązany z graczem.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }W definicji klasy
invisibility_managerdodaj następujące pola:Edytowalna tablica generatorów graczy
PlayerSpawners. Pozwoli ona śledzić generatory graczy pod kątem pojawiania się infiltratorów i posłuży do ustawienia ich niewidoczności w chwili spawnuinvisibility_manager := class(creative_device): Logger:log = log{Channel := triad_invisibility_log_channel} # Tablica punktów spawnu graczy dla drużyny infiltratorów @editable PlayersSpawners:[]player_spawner_device = array{}Edytowalna wartość logiczna (logic)
IsVisibilityShared. Będzie służyć do ustalania, czy migotanie po zadaniu obrażeń będzie dotyczyło wszystkich infiltratorów równocześnie czy tylko gracza, który odniósł obrażenia.# Tablica punktów spawnu graczy dla drużyny infiltratorów @editable PlayersSpawners:[]player_spawner_device = array{} # Określ, czy uwidocznienie infiltratorów jest stosowane do wszystkich członków drużyny. @editable IsVisibilityShared:logic = trueEdytowalne wartości zmiennopozycyjnej (float)
VulnerableSecondsorazFlickerRateSeconds. Pierwsza z nich określa, jak długo infiltratorzy będą migotać po odniesieniu obrażeń, a druga określa szybkość odtwarzania animacji migotania.# Określ, czy uwidocznienie infiltratorów jest stosowane do wszystkich członków drużyny. @editable IsVisibilityShared:logic = true # Określa, jak długo infiltratorzy pozostają widoczni po odniesieniu obrażeń. @editable VulnerableSeconds:float = 3.0 # Określ, jak szybko infiltratorzy będą migotać po odniesieniu obrażeń. @editable FlickerRateSeconds:float = 0.4Tablica zmiennych drużyn o nazwie
Teams. Zostanie wykorzystana do sprawdzenia, czy gracz jest infiltratorem.# Określ, jak szybko infiltratorzy będą migotać po odniesieniu obrażeń. @editable FlickerRateSeconds:float = 0.4 # Tablica wszystkich drużyn w grze. var Teams:[]team = array{}Mapa zmiennych z
agentnafloato nazwiePlayerVisibilitySeconds. Mapuje ona poszczególnych agentów na liczbę sekund migotania pozostałą po odniesieniu obrażeń.var Teams:[]team = array{} # Tablica wszystkich drużyn w grze. var Teams:[]team = array{} # Mapa graczy do liczby sekund, przez które będą oni migać. var PlayerVisibilitySeconds:[agent]float = map{}
W
OnBegin()dodaj w dzienniku prostą instrukcję sprawdzenia, czy urządzenie zostało uruchomione. Chcesz się upewnić, żeinvisibility_managerzostaje uruchomiony po zrównoważeniu drużyn za pomocą skryptutriad_infiltration_game, aby uniknąć sytuacji, w której gracze należący do niewłaściwej drużyny będą niewidoczni. Aby zyskać taką gwarancję, uruchominvisibility_managerz poziomutriad_infiltration_game, a nie wOnBegin().OnBegin<override>()<suspends>:void= # Poczekaj, aż drużyny zostaną zrównoważone, przed zasubskrybowaniem zdarzeń, które sprawiają, że gracze stają się niewidoczni. Logger.Print("Oczekiwanie na zrównoważenie drużyn...")Dodaj nową metodę
OnPlayerSpawn()do definicji klasyinvisibility_manager. Chcesz mieć pewność, że infiltratorzy są niewidoczni przy każdym zespawnowaniu, dlatego najpierw obsłużysz tę funkcję.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!")W
OnPlayerSpawn()pobierzfort_characterpowiązany z zespawnowanym agentem za pomocąGetFortCharacter[]i zapisz w zmiennejFortCharacter. Pobierz również drużynę zespawnowanego agenta przy użyciuGetTeam[]i zapisz ją w zmiennejCurrentTeam.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]Sprawdź, czy drużyna
CurrentTeamjest zgodna z pierwszą drużyną w tablicyTeams, którą powinni być infiltratorzy. Jeśli tak, ten agent jest infiltratorem i możesz wywołać funkcjęHide()dlaFortCharacteragenta. Dzięki temu agent stanie się niewidoczny po zespawnowaniu. Otrzymana funkcjaOnPlayerSpawn()powinna wyglądać następująco: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()
Dodaj nową metodę
StartInvisibilityManager()do definicji klasyinvisibility_manager. W tej funkcji zastosowano tablicę drużyn typuAllTeams, tablicę graczy typuAllPlayersoraz odwołanie do drużyny infiltratorów typuteam. Wywołasz tę funkcję z poziomutriad_infiltration_game, aby zainicjować logikęinvisibility_manager, dlatego funkcja ta musi mieć specyfikator<public>umożliwiający klasietriad_infiltration_gamejej wyszukanie.# Uruchamia logikę menedżera niewidzialności. Funkcja wywoływana z klasy triad_infiltration po zakończeniu równoważenia drużyn StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("Uruchomiono skrypt niewidzialności!")W
StartInvisibilityManager():Ustaw dla tablicy
TeamstablicęAllTeams.# Uruchamia logikę menedżera niewidzialności. Funkcja wywoływana z klasy triad_infiltration po zakończeniu równoważenia drużyn StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Uruchomiono skrypt niewidzialności!") set Teams = AllTeamsW pętli
forzasubskrybuj każdy generator graczy wPlayerSpawnersdo swojej funkcjiOnPlayerSpawn().for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)Po uruchomieniu skryptu chcesz wyszukać każdego infiltratora i ustawić jego niewidoczność. Chcesz również utworzyć dla każdego z nich wpis w swojej mapie
PlayerVisibilitySeconds. Wykorzystasz ją później do monitorowania czasu migotania każdego z infiltratorów, który odniesie obrażenia. Podobnie jak wOnPlayerSpawn(), pobierzfort_characteriteamdla każdego gracza.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]Sprawdź, czy drużyna
CurrentTeamjest zgodna z drużynąInfiltratorsprzekazaną do tej funkcji. Jeśli tak, ustaw klatkę kluczową gracza wPlayerVisibilitySecondsna0.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")Na końcu ustaw niewidoczność gracza, wywołując
Hide()dlaFortCharactergracza. KodStartInvisibilityManagerpowinien wyglądać następująco: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):
Wywoływanie menedżera niewidoczności z poziomu gry Trójstronna infiltracja
Wróć do
triad_infiltration_gamei dodaj edytowalnyinvisibility_managerdo definicji klasy. Będzie to urządzenie w twoim poziomie wywoływane przez urządzenietriad_infiltration_game.# Odwołanie do skryptu invisibility_manager, który kontroluje niewidzialność infiltratora. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}W funkcji
OnBegin()po wywołaniuBalanceTeams()wywołajStartInvisibilityManager(), przekazując tabliceTeams,AllPlayersiInfiltrators. Otrzymana funkcjaOnBegin()powinna wyglądać następująco: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?Zapisz pliki i skompiluj je. Wybierz urządzenie w Outlinerze i przypisz dowolne panele startowe dla infiltratorów do tablicy PlayerSpawners.
Wybierz urządzenie triad_infiltration_game w Outlinerze, a następnie przypisz swoje urządzenie invisibility_manager do jego właściwości InvisibilityManager.
Na pasku narzędzi UEFN kliknij Uruchom sesję, aby przetestować poziom w grze.
W trakcie testowania poziomu w grze każdy gracz powinien trafiać do drużyny, w której różnica liczebności graczy jest największa, a także spawnować się z rodzajem broni właściwym dla swojej drużyny. Każdy infiltrator powinien być niewidoczny, gdy gra się rozpoczyna, a także po każdym respawnie.
Następny krok
W następnym kroku tego samouczka dowiesz się, jak skonfigurować migotanie postaci infiltratora, gdy doznaje on obrażeń.