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 przy użyciu Eksploratora Verse i przeciągnij je do poziomu.
- U góry pliku
invisibility_manager
dodajusing { /Fortnite.com/Characters }
, aby pobrać elementfort_character
powiązany z graczem.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }
- W definicji klasy
invisibility_manager
dodaj 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 = true
- Edytowalne wartości pojedynczej precyzji (float)
VulnerableSeconds
orazFlickerRateSeconds
. 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.4
- Tablica 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
agent
nafloat
o 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{}
- Edytowalna tablica generatorów graczy
- W
OnBegin()
dodaj w dzienniku prostą instrukcję sprawdzenia, czy urządzenie zostało uruchomione. Chcesz się upewnić, żeinvisibility_manager
zostaje 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_manager
z 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ę.# Obsługuje gracza spawnującego się z panelu startowego infiltratora OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("Gracz właśnie zespawnował się z panelu startowego infiltratora!")
- W
OnPlayerSpawn()
pobierzfort_character
powią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
.# Obsługuje gracza spawnującego się z panelu startowego infiltratora OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("Gracz właśnie zespawnował się z panelu startowego infiltratora!") if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent]
- Sprawdź, czy drużyna
CurrentTeam
jest 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()
dlaFortCharacter
agenta. Dzięki temu agent stanie się niewidoczny po zespawnowaniu. Otrzymana funkcjaOnPlayerSpawn()
powinna wyglądać następująco:# Obsługuje gracza spawnującego się z panelu startowego infiltratora OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("Gracz właśnie zespawnował się z panelu startowego infiltratora!") if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent] Teams[0] = CurrentTeam Logger.Print("Gracz został zespawnowany jako infiltrator, ustawiam niewidoczność gracza") then: FortCharacter.Hide()
- W
- Dodaj nową metodę
StartInvisibilityManager()
do definicji klasyinvisibility_manager
. W tej funkcji zastosowano tablicę drużyn typuAllTeams
, tablicę graczy typuAllPlayers
oraz 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_game
jej 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
Teams
tablicę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 = AllTeams
- W pętli
for
zasubskrybuj każdy generator graczy wPlayerSpawners
do 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_character
iteam
dla każdego gracza.for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # W przypadku każdego gracza, sprawdź, czy został zespawnowany w drużynie infiltratorów, a jeśli tak, zespawnuj # dla niego funkcję OnInfiltratorDamaged. Następnie spraw, aby jego postać była niewidoczna. for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer]
- Sprawdź, czy drużyna
CurrentTeam
jest zgodna z drużynąInfiltrators
przekazaną do tej funkcji. Jeśli tak, ustaw klatkę kluczową gracza wPlayerVisibilitySeconds
na0.0
.for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer] Logger.Print("Pobrano bieżącą drużynę tego gracza") Infiltrators = CurrentTeam set PlayerVisibilitySeconds[TeamPlayer] = 0.0 Logger.Print("Dodano gracza do PlayerVisibilitySeconds")
- Na końcu ustaw niewidoczność gracza, wywołując
Hide()
dlaFortCharacter
gracza. KodStartInvisibilityManager
powinien wyglądać następująco:# 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 = AllTeams for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # W przypadku każdego gracza, sprawdź, czy został zespawnowany w drużynie infiltratorów, a jeśli tak, zespawnuj # dla niego funkcję OnInfiltratorDamaged. Następnie spraw, aby jego postać była niewidoczna. for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer] Logger.Print("Pobrano bieżącą drużynę tego gracza") Infiltrators = CurrentTeam set PlayerVisibilitySeconds[TeamPlayer] = 0.0 Logger.Print("Dodano gracza do PlayerVisibilitySeconds") then: spawn{OnInfiltratorDamaged(TeamPlayer)} Logger.Print("Gracz został zespawnowany jako infiltrator, ustawiam niewidoczność gracza") FortCharacter.Hide() else: Logger.Print("Ten gracz nie jest infiltratorem")
- Ustaw dla tablicy
Wywoływanie menedżera niewidoczności z poziomu gry Trójstronna infiltracja
- Wróć do
triad_infiltration_game
i dodaj edytowalnyinvisibility_manager
do 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
,AllPlayers
iInfiltrators
. Otrzymana funkcjaOnBegin()
powinna wyglądać następująco:OnBegin<override>()<suspends>:void = # Pobierz wszystkie drużyny set Teams = GetPlayspace().GetTeamCollection().GetTeams() # Zapisz drużyny, aby móc się później do nich odwołać set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]} if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Znaleziono wszystkie trzy drużyny") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Ustaw wszystkie trzy drużyny w TeamsAndTotals") then: #Zasubskrybuj PlayerAddedEvent, aby umożliwić ponowne zrównoważenie drużyny, gdy do gry dołączy nowy gracz GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded) for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) BalanceTeams() Logger.Print("Drużyny zrównoważone, wywoływanie skryptu niewidzialności") InvisibilityManager.StartInvisibilityManager(Teams,AllPlayers, Infiltrators) TeleportPlayersToStartLocations() else: Logger.Print("Nie udało się znaleźć wszystkich drużyn. Pamiętaj, aby przypisać właściwe drużyny w ustawieniach wyspy.")
- 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 ustawić migotanie postaci infiltratora, gdy doznaje on obrażeń.