Dei tre team, gli Infiltrati avranno il ruolo più unico nella tua esperienza di gioco. Gli Infiltrati hanno una natura discreta e iniziano il gioco essendo invisibili. Si generano con un fucile a colpo singolo estremamente potente e possono eliminare gli avversari usando le ombre mentre si avvicinano furtivamente alla base dei Difensori. Tuttavia, gli infiltrati non sono sempre invisibili: se vengono colpiti, perdono temporaneamente la loro invisibilità e appaiono e scompaiono a intermittenza.
In questo tutorial, imparerai anche come applicare un effetto di sfarfallio a tutti gli Infiltrati quando un membro del team subisce danni o a solo un singolo giocatore del team. L'effetto di sfarfallio applicato all'intero team rende l'esperienza di gioco più complessa per gli Infiltrati e incoraggia al contempo un gioco più prudente.
Segui i passaggi seguenti per scoprire come rendere gli Infiltrati invisibili al momento della generazione.
Creazione del dispositivo Gestione invisibilità
- Crea un nuovo dispositivo Verse denominato invisibility_manager utilizzando Verse Explorer e trascinalo nel livello.
- Nella parte superiore del file
invisibility_manager
, aggiungiusing { /Fortnite.com/Characters }
per far sì che ilfort_character
sia associato a un giocatore.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }
- Nella definizione della classe
invisibility_manager
, aggiungi i seguenti campi:- Un array modificabile di generatori di giocatori
PlayerSpawners
. Questo terrà traccia dei punti di generazione degli Infiltrati e sarà utilizzato per renderli invisibili al momento della generazioneinvisibility_manager := class(creative_device): Logger:log = log{Channel := triad_invisibility_log_channel} # Array di generatori di giocatori per il team degli infiltrati @editable PlayersSpawners:[]player_spawner_device = array{}
- Una logica modificabile
IsVisibilityShared
. Questa determinerà se l'effetto sfarfallio post-danni viene applicato a tutti gli Infiltrati contemporaneamente o solo al giocatore che ha subito i danni.# Array di generatori di giocatori per il team degli infiltrati @editable PlayersSpawners:[]player_spawner_device = array{} # Determina se la visibilità degli infiltrati è condivisa con i compagni di team. @editable IsVisibilityShared:logic = true
- Un float modificabile
VulnerableSeconds
e un float modificabileFlickerRateSeconds
. Il primo controlla la durata dell'effetto sfarfallio applicato agli Infiltrati dopo i danni, mentre il secondo regola la velocità dell'animazione dello sfarfallio stesso.# Determina se la visibilità degli infiltrati è condivisa con i compagni di team. @editable IsVisibilityShared:logic = true # Per quanto tempo gli infiltrati sono visibili dopo aver subito danni. @editable VulnerableSeconds:float = 3.0 # Quanto velocemente gli infiltrati sfarfallano dopo essere stati danneggiati. @editable FlickerRateSeconds:float = 0.4
- Un array dei team variabile denominato
Teams
. Da utilizzare per verificare se un giocatore è un Infiltrato.# Quanto velocemente gli infiltrati sfarfallano dopo essere stati danneggiati. @editable FlickerRateSeconds:float = 0.4 # Array di tutti i team nel gioco. var Teams:[]team = array{}
- Una mappa variabile di
agent
afloat
chiamataPlayerVisibilitySeconds
. Questa associa i singoli agenti al numero di secondi di sfarfallio rimanenti dopo il danneggiamento.var Teams:[]team = array{} # Array di tutti i team nel gioco. var Teams:[]team = array{} # Mappa dei giocatori in funzione del numero di secondi che hanno a disposizione per continuare a lampeggiare. var PlayerVisibilitySeconds:[agent]float = map{}
- Un array modificabile di generatori di giocatori
- In
OnBegin()
, aggiungi una semplice dichiarazione di registro per verificare che il dispositivo sia stato avviato. Vuoi assicurarti cheinvisibility_manager
venga eseguito dopo che i team sono stati bilanciati dallo scripttriad_infiltration_game
per evitare che i giocatori del team sbagliato si ritrovino con l'invisibilità. Per garantire ciò, avviainvisibility_manager
datriad_infiltration_game
, piuttosto che eseguendo il codice inOnBegin()
.OnBegin<override>()<suspends>:void= # Attendi che i team siano bilanciati prima di iscriverti agli eventi che rendono invisibili i giocatori. Logger.Print("In attesa del bilanciamento dei team...")
- Aggiungi un nuovo metodo
OnPlayerSpawn()
alla definizione della classeinvisibility_manager
. Dal momento che vuoi assicurarti che gli Infiltrati siano invisibili ogni volta che si generano, ti occuperai di questa funzione come prima cosa.# Gestisce un giocatore che si genera da una pedana di generazione degli infiltrati OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("Si è appena generato un giocatore da una pedana di generazione degli infiltrati!")
- In
OnPlayerSpawn()
, ottieni ilfort_character
associato all'agente generato utilizzandoGetFortCharacter[]
e salvalo in una variabileFortCharacter
. Inoltre, ottieni il team dell'agente generato utilizzandoGetTeam[]
e salvalo in una variabileCurrentTeam
.# Gestisce un giocatore che si genera da una pedana di generazione degli infiltrati OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("Si è appena generato un giocatore da una pedana di generazione degli infiltrati!") if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent]
- Verifica che
CurrentTeam
corrisponda al primo team dell'arrayTeams
, ovvero quello degli Infiltrati. Se è così, questo agente è un Infiltrato e puoi chiamareHide()
sulFortCharacter
dell'agente. Ciò renderà l'agente invisibile al momento della generazione. La tua funzioneOnPlayerSpawn()
dovrebbe essere simile alla seguente:# Gestisce un giocatore che si genera da una pedana di generazione degli infiltrati OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("Si è appena generato un giocatore da una pedana di generazione degli infiltrati!") if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent] Teams[0] = CurrentTeam Logger.Print("Giocatore generato come infiltrato, rendendolo invisibile") then: FortCharacter.Hide()
- In
- Aggiungi un nuovo metodo
StartInvisibilityManager()
alla definizione della classeinvisibility_manager
. Questa funzione accetta un array di tipo teamAllTeams
, un array di tipo giocatoreAllPlayers
e un riferimento al team degli Infiltrati di tipoteam
. Chiama la classe datriad_infiltration_game
per avviare la logica diinvisibility_manager
, quindi questa funzione deve avere lo specificatore<public>
per permettere atriad_infiltration_game
di trovarla.# Avvia la logica del gestore dell'invisibilità. Chiamato dalla classe triad_infiltration una volta terminato il bilanciamento dei team StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("Script di invisibilità avviato!")
- In
StartInvisibilityManager()
:- Imposta l'array
Teams
sull'arrayAllTeams
.# Avvia la logica del gestore dell'invisibilità. Chiamato dalla classe triad_infiltration una volta terminato il bilanciamento dei team StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Script di invisibilità avviato!") set Teams = AllTeams
- In un loop
for
, sottoscrivi ogni generatore di giocatori inPlayerSpawners
alla tua funzioneOnPlayerSpawn()
.for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)
- Quando lo script si avvia, devi trovare ogni Infiltrato e renderlo invisibile. Inoltre, devi creare una voce per loro nella tua mappa
PlayerVisibilitySeconds
. La utilizzerai in seguito per tenere traccia della durata dell'effetto sfarfallio di ogni Infiltrato che ha subito danni. Proprio come inOnPlayerSpawn()
, ottienifort_character
eteam
per ogni giocatore.for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Per ogni giocatore, se si è generato nel team degli infiltrati, genera una funzione OnInfiltratorDamaged per quel # giocatore. Poi rendi il loro personaggio invisibile. for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer]
- Verifica che
CurrentTeam
corrisponda al teamInfiltrators
passato in questa funzione. Se è così, imposta la chiave del giocatore inPlayerVisibilitySeconds
su0.0
.for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer] Logger.Print("Team attuale del giocatore identificato") Infiltrators = CurrentTeam set PlayerVisibilitySeconds[TeamPlayer] = 0.0 Logger.Print("Giocatore aggiunto a PlayerVisibilitySeconds")
- Infine, rendi il giocatore invisibile chiamando
Hide()
suFortCharacter
del giocatore. Il codiceStartInvisibilityManager
deve essere simile al seguente:# Avvia la logica del gestore dell'invisibilità. Chiamato dalla classe triad_infiltration una volta terminato il bilanciamento dei team StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Script di invisibilità avviato!") set Teams = AllTeams for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Per ogni giocatore, se si è generato nel team degli infiltrati, genera una funzione OnInfiltratorDamaged per quel # giocatore. Poi rendi il loro personaggio invisibile. for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer] Logger.Print("Team attuale del giocatore identificato") Infiltrators = CurrentTeam set PlayerVisibilitySeconds[TeamPlayer] = 0.0 Logger.Print("Giocatore aggiunto a PlayerVisibilitySeconds") then: spawn{OnInfiltratorDamaged(TeamPlayer)} Logger.Print("Giocatore generato come infiltrato, rendendolo invisibile") FortCharacter.Hide() else: Logger.Print("Questo giocatore non è un infiltrato")
- Imposta l'array
Richiamare il dispositivo Gestore invisibilità nel gioco di infiltrazione a tre team
- In
triad_infiltration_game
, aggiungi uninvisibility_manager
modificabile alla definizione della classe. Questo è il dispositivo del tuo livello che sarà richiamato dal dispositivotriad_infiltration_game
.# Riferimento allo script invisibility_manager che controlla l'invisibilità degli infiltrati. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}
- Nella funzione
OnBegin()
dopo la chiamata aBalanceTeams()
, chiamaStartInvisibilityManager()
, passandoTeams
,AllPlayers
eInfiltrators
. La tua funzioneOnBegin()
deve essere simile alla seguente:OnBegin<override>()<suspends>:void = # Ottieni tutti i team set Teams = GetPlayspace().GetTeamCollection().GetTeams() # Salva i team per farvi riferimento in seguito set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]} if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Sono stati trovati tutti e tre i team") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Configura tutti e tre i team in TeamsAndTotals") then: #Sottoscrive l'evento PlayerAddedEvent per consentire il ribilanciamento del team quando un nuovo giocatore si unisce al gioco GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded) for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) BalanceTeams() Logger.Print("Team bilanciati correttamente: chiamata dello script di invisibilità") InvisibilityManager.StartInvisibilityManager(Teams,AllPlayers, Infiltrators) TeleportPlayersToStartLocations() else: Logger.Print("Impossibile trovare tutti i team: assicurati di assegnare i team corretti nelle impostazioni della tua isola.")
- Salva i file e compilali. Seleziona il dispositivo nell'Outliner e assegna le pedane di generazione per gli Infiltrati all'array PlayerSpawners.
- Seleziona il tuo dispositivo triad_infiltration_game nell'Outliner e assegna il dispositivo invisibility_manager alla sua proprietà InvisibilityManager.
- Fai clic su Avvia sessione nella barra degli strumenti UEFN per eseguire il playtest del livello.
Durante il playtest del livello, ogni giocatore dovrebbe essere assegnato al team con la differenza maggiore ed essere generato con un'arma appropriata per il suo team. Ogni Infiltrato dovrebbe essere invisibile, sia all'inizio del gioco che quando si rigenera.

Passaggio successivo
Nel passaggio successivo di questo tutorial, imparerai come applicare un effetto di sfarfallio a un personaggio infiltrato quando subisce dei danni.