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_charactersia 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 = trueUn float modificabile
VulnerableSecondse 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.4Un array dei team variabile denominato
Teams. Da utilizzare per verificare se un giocatore è un Infiltrato.# Determina la velocità dell'effetto di sfarfallio applicato agli infiltrati dopo aver subito danni. @editable FlickerRateSeconds:float = 0.4 # Array di tutti i team nel gioco. var Teams:[]team = array{}Una mappa variabile di
agentafloatchiamataPlayerVisibilitySeconds. 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{}
In
OnBegin(), aggiungi una semplice dichiarazione di registro per verificare che il dispositivo sia stato avviato. Vuoi assicurarti cheinvisibility_managervenga eseguito dopo che i team sono stati bilanciati dallo scripttriad_infiltration_gameper evitare che i giocatori del team sbagliato si ritrovino con l'invisibilità. Per garantire ciò, avvieraiinvisibility_managerdatriad_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.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(), ottieni ilfort_characterassociato all'agente generato utilizzandoGetFortCharacter[]e salvalo in una variabileFortCharacter. Inoltre, ottieni il team dell'agente generato utilizzandoGetTeam[]e salvalo in una variabileCurrentTeam.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]Verifica che
CurrentTeamcorrisponda al primo team dell'arrayTeams, ovvero quello degli Infiltrati. Se è così, questo agente è un Infiltrato e puoi chiamareHide()sulFortCharacterdell'agente. Ciò renderà l'agente invisibile al momento della generazione. La tua funzioneOnPlayerSpawn()deve essere simile alla seguente: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()
Aggiungi un nuovo metodo
StartInvisibilityManager()alla definizione della classeinvisibility_manager. Questa funzione accetta un array di tipo teamAllTeams, un array di tipo giocatoreAllPlayerse un riferimento al team degli Infiltrati di tipoteam. Chiama la classe datriad_infiltration_gameper avviare la logica diinvisibility_manager, quindi questa funzione deve avere lo specificatore<public>per permettere atriad_infiltration_gamedi 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
Teamssull'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 = AllTeamsIn un loop
for, sottoscrivi ogni generatore di giocatori inPlayerSpawnersalla 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_charactereteamper ogni giocatore.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]Verifica che
CurrentTeamcorrisponda al teamInfiltratorspassato a questa funzione. Se è così, imposta la chiave del giocatore inPlayerVisibilitySecondssu0.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")Infine, rendi il giocatore invisibile chiamando
Hide()suFortCharacterdel giocatore. Il codiceStartInvisibilityManagerdeve essere simile al seguente: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):
Richiamo del dispositivo Gestore invisibilità dal gioco di infiltrazione a tre team
In
triad_infiltration_game, aggiungi uninvisibility_managermodificabile 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,AllPlayerseInfiltrators. La tua funzioneOnBegin()deve essere simile alla seguente: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?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.
Step successivo
Nel passaggio successivo di questo tutorial, imparerai come applicare un effetto di sfarfallio a un personaggio di Infiltrato quando subisce danni.