Con i tag gameplay, puoi individuare gli attori contrassegnati da un tag specifico, mentre il gioco è in corso. I tag gameplay ti consentono di utilizzare più attori senza impostare le proprietà e assegnare i riferimenti in Unreal Editor per Fortnite (UEFN). I tag gameplay sono creati nel codice Verse e assegnati in UEFN.
L'uso dei tag gameplay può aprire interessanti opportunità di gameplay, come ad esempio:
- Alterare l'impostazione del livello senza dover aggiungere o modificare i riferimenti al dispositivo creato da Verse.
- Trovare tutti gli attori con un tag specifico e attivarli in base al loro tipo, ad esempio accendendo le luci o attivando/disattivando le barriere.
- Cambiare in modo dinamico gli attori attivi man mano che il giocatore avanza nel gioco.
- Abilitare in modo condizionale gli attori a una corsa a ostacoli in base a un'opzione di difficoltà selezionata dal giocatore.
Che cosa può essere taggato?
Attualmente i tag gameplay si possono assegnare ai seguenti elementi:
Le sezioni seguenti mostrano come creare e utilizzare i tag gameplay nel tuo progetto.
Creazione di un tag gameplay
Per creare un nuovo tag gameplay utilizzando Verse, attieniti ai seguenti passaggi:
- Apri il file Verse in Visual Studio Code con Verse Explorer.
- All'inizio del file Verse, aggiungi il seguente codice per abilitare il riferimento alla classe
tag
.using { /Verse.org/Simulation/Tags }
- Crea una nuova classe che eredita dalla classe
tag
. Il nome della tua classe determina il nome del tag. In questo esempio, la classe si chiamamytag
, quindi il nome del tag gameplay è mytag.# Deriva dalla classe `tag` del modulo Verse.org/Simulation/Tags per creare un nuovo tag di gameplay. mytag := class(tag){}
- Il tuo file Verse deve essere simile a questo:
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Deriva dalla classe `tag` del modulo Verse.org/Simulation/Tags per creare un nuovo tag di gameplay. mytag := class(tag){}
- Salva il file di Verse e fai clic su Compila gli script di Verse nella barra degli strumenti UEFN per compilare il codice e utilizzare il nuovo tag gameplay.
I tag gameplay sono etichette gerarchiche. Questi tag possono avere un numero qualsiasi di livelli gerarchici, separati dal carattere _
nel nome della classe.
Quando il nome del tag gameplay viene visualizzato nell'editor, i caratteri _
vengono convertiti in ".".
Ad esempio, un tag gameplay con tre livelli avrebbe il nome di classe family_genus_species
e verrebbe visualizzato nell'editor come "family.genus.species", dove "family" è l'identificatore più ampio nella gerarchia e "species" quello più specifico.
Tieni presente che l'esistenza di "family.genus.species" non significa implicitamente che esistano anche i tag gameplay "family.genus" e "family". Per creare i livelli gerarchici, devi creare questi tag gameplay con i nomi delle classi family
e family_genus
.
Assegnazione di un tag gameplay
Per assegnare un tag gameplay, attieniti ai seguenti passaggi. Questo esempio utilizza un dispositivo, ma i passaggi sono i medesimi per gli altri attori.
-
In UEFN, da Outliner, seleziona il dispositivo a cui assegnare il tag per aprire il relativo pannello Dettagli. In questo esempio, si tratta di un dispositivo Pulsante.
-
Nel pannello Dettagli, fai clic su Aggiungi nuovo componente e scegli Tag markup Verse dal menu a tendina.
-
Seleziona il componente VerseTagMarkup per visualizzare le relative impostazioni nel pannello Dettagli.
-
In Tag gameplay, modifica la proprietà Tag e aggiungi il tag gameplay. In questo esempio, mytag viene aggiunto al dispositivo.
Puoi aggiungere più tag allo stesso attore in modo che ogni attore possa appartenere a più gruppi contemporaneamente. Se un attore ha più tag, sarà possibile trovarlo in base a qualsiasi tag.
Ad esempio, un attore con i tag mytag1 e mytag2 verrà trovato quando si chiama GetCreativeObjectsWithTag(mytag1{})
o GetCreativeObjectsWithTag(mytag2{})
. Per maggiori informazioni su questa funzione, vedi Attori con un tag gameplay.
Trovare attori con un tag gameplay
Una volta che disponi di attori con tag gameplay assegnati, puoi individuarli in base al tag gameplay durante un gioco utilizzando la funzione Verse GetCreativeObjectsWithTag()
. Nell'esempio seguente, chiamando GetCreativeObjectsWithTag(mytag{})
si ottiene TaggedDevices
contenente tutti gli attori a cui è stato assegnato mytag:
TaggedActors := GetCreativeObjectsWithTag(mytag{})
La chiamata di funzione GetCreativeObjectsWithTag()
restituisce un array di tutti gli oggetti che implementano creative_object_interface
. Ad esempio, se hai assegnato mytag sia a un dispositivo Pulsante che a un dispositivo Luce personalizzabile nel livello, questa chiamata di funzione restituisce entrambi i dispositivi.
Puoi convertire il risultato di GetCreativeObjectsWithTag()
in una delle sue classi di implementazione (chiamate cast di tipo) utilizzando la sintassi NewObjectReference := object_type_to_cast_to[ObjectReference]
, dove object_type_to_cast_to
è il tipo di oggetto desiderato. Ad esempio, se vuoi spegnere o accendere un dispositivo luce personalizzabile, devi convertire il risultato in customizable_light_device
prima di chiamare la funzione TurnOff()
o TurnOn()
.
Il cast di tipo è un'espressione fallibile perché la conversione del tipo non riesce se il dispositivo non può essere convertito in quel tipo, ad esempio se si tratta di un dispositivo di tipo diverso. Ad esempio, non puoi convertire un dispositivo Pulsante in una classe customizable_light_device
, perché un dispositivo Pulsante e un dispositivo Luce personalizzabile non sono lo stesso tipo di dispositivo.
Con le espressioni for
, puoi utilizzare le espressioni fallibili come filtro e creare nuove variabili da usare nel blocco di codice for
. Ad esempio, puoi aggiungere la conversione del tipo di customizable_light_device
all'espressione di iterazione presente in for
. Poiché il dispositivo sarà convertito in customizable_light_device
, potrai utilizzare le funzioni specifiche di questa classe, come ad esempio TurnOff()
per spegnere la luce.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors, LightDevice := customizable_light_device[TaggedActor]):
LightDevice.TurnOff()
L'esempio seguente mostra come controllare in modo condizionale il tipo di attore e chiamare funzioni diverse in base al tipo. L'esempio verifica se l'attore taggato è un dispositivo Luce personalizzabile che può chiamare TurnOff()
per spegnere la luce o se l'attore è un dispositivo Barriera che può chiamare Disable()
per spegnerla.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors):
if (LightDevice := customizable_light_device[TaggedActor]):
# Se l'attore taggato è un dispositivo Luce personalizzabile, spegnila
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# Se l'attore taggato è un dispositivo Barriera, spegni la luce
BarrierDevice.Disable()
Quando chiami GetCreativeObjectsWithTag()
, l'elenco risultante non è ordinato secondo un metodo che puoi conoscere o influenzare in anticipo. Nei casi in cui si aggiungono o si rimuovono attori tra una chiamata e l'altra a GetCreativeObjectsWithTag()
utilizzando lo stesso tag, l'elenco risultante potrebbe essere in un ordine diverso per ogni risultato della chiamata.
Se il tuo gioco deve gestire gli attori in un ordine specifico, allora devi utilizzare un array modificabile invece dei tag gameplay, poiché il risultato di GetCreativeObjectsWithTag()
è un elenco non ordinato di attori.
Trovare la posizione per tipo con i tag gameplay
Ecco un esempio di come filtrare per tipo gli attori restituiti da GetCreativeObjectsWithTag()
e stampare la loro posizione.
# trova tutti gli attori con all_tag
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Stampa la posizione di tutti i creative_prop actors con all_tag
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Prop found with all_tag at position: {Prop.GetTransform().Translation}")
# Stampa la posizione di tutti gli attori dispositivo con all_tag
for (Device:AllCreativeObjects):
if (Device := creative_device_base[Device]):
Print("Creative device found with all_tag at position: {Device.GetTransform().Translation}")
# Stampa la posizione di tutti gli attori dispositivo creati da Verse con all_tag
for (VerseAuthoredDevice : AllCreativeObjects):
if (VerseAuthoredDevice := creative_device[VerseAuthoredDevice]):
Print("User device found with all_tag at position: {VerseAuthoredDevice.GetTransform().Translation}")
Esplorare i tutorial che utilizzano i tag gameplay
I seguenti tutorial mostrano come utilizzare i tag gameplay in un gioco.