Puoi esporre le tue risorse in UEFN a Verse in modo da poterle usare dal tuo codice Verse. Questa operazione è chiamata riflessione degli asset e puoi utilizzarla per inserire immagini nella tua UI personalizzata o utilizzare mesh per i tuoi oggetti scenografici personalizzati.
Quando esponi un asset a Verse, il nome dell'asset diventa l'identificatore, che è un simbolo di compilatore. Questo identificatore può essere utilizzato nel codice di Verse e ti permette di accedere all'asset tramite il suo percorso Verse specifico. La denominazione degli asset deve seguire le convenzioni e regole di denominazione degli identificatori. Puoi vedere tutti gli asset esposti a Verse nel file Assets.digest.verse del tuo progetto .
Per generare il file Assets.digest.verse, devi avere almeno un file Verse nel progetto prima di compilare il codice Verse.
Ad esempio, se la texture ha il nome MyTexture, viene visualizzata nel file Assets.digest.verse come MyTexture<scoped {MyProject}>:texture_2d = external {}
.
Quando inserisci gli asset in sottocartelle nella cartella Contenuto del progetto, il nome della sottocartella diventa il nome del modulo Verse. Ad esempio, quando crei una mesh personalizzata denominata MySphere, che si trova nella sottocartella Mesh della cartella Contenuto del progetto, devi qualificare il nome della mesh con il nome del modulo (sottocartella) nel codice, ad esempio Meshes.MySphere
.
Attualmente, puoi esporre i seguenti tipi di asset a Verse:
- Mesh
- Texture
- Materiali
- Niagara VFX Particle Systems
Le sezioni seguenti descrivono come impostare ogni tipo di asset in modo che sia disponibile nel codice Verse.
Mesh
Per fare riferimento a una tua mesh nel codice Verse, segui questi passaggi:
-
Modella la tua mesh in UEFN o importare una mesh nel tuo progetto.
Gli asset che importi da Fab devono essere aggiunti come asset Unreal Engine modificabili per essere visualizzati nel file Assets.digest.verse . Al momento non è possibile utilizzare asset referenziati da Fab nel codice Verse.
- Salva la mesh scegliendo File > Salva tutto.
- Verifica che il nome della mesh sia visualizzato correttamente nel file Assets.digest.verse del progetto .
Puoi quindi utilizzare la tua mesh con le API Verse, ad esempio impostandola su un oggetto scenografico di Fortnite Creativo.
L'esempio seguente illustra un [dispositivo Verse] (create-your-own-device-in-verse) che genera un oggetto scenografico all'avvio del gioco. Nell'esempio viene utilizzata una mesh denominata MySphere che si trovava nella sottocartella Mesh della cartella Contenuto del progetto.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Fortnite.com/UI }
using { /UnrealEngine.com/Temporary/UI }
using { /UnrealEngine.com/Temporary/SpatialMath }
# A Verse-authored creative device that spawns a prop and sets its mesh.
my_device := class(creative_device):
# Viene eseguito quando il dispositivo viene avviato in un gioco in esecuzione
OnBegin<override>()<suspends> : void =
SpawnLocation := transform:
Translation := vector3{X := 0.0, Y := 0.0, Z := 0.0}
Rotation := IdentityRotation()
Scale := vector3{X := 1.0, Y := 1.0, Z := 1.0}
SpawnPropResult := SpawnProp(DefaultCreativePropAsset, SpawnLocation)
# Il risultato di SpawnProp() è una tupla dove il primo elemento è un oggetto scenografico di Fortnite Creativo opzionale
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMesh(Meshes.MySphere)
Texture
Per fare riferimento alla tua texture nel codice Verse, segui questi passaggi:
- Importa la texture in UEFN.
Gli asset che importi da Fab devono essere aggiunti come asset Unreal Engine modificabili per essere visualizzati nel file Assets.digest.verse . Al momento non è possibile utilizzare asset referenziati da Fab nel codice Verse.
- Salva la texture scegliendo File > Salva tutto.
- Verifica che il nome della texture sia visualizzato correttamente nel file Assets.digest.verse del progetto .
Puoi quindi utilizzare la tua texture con le API Verse, come ad esempio UI Verse.
Materiali
Per fare riferimento al tuo materiale nel codice Verse, segui questi passaggi:
- Crea il tuo materiale in UEFN.
- Verifica che il nome del materiale sia visualizzato nel file Assets.digest.verse del progetto .
Puoi quindi utilizzare il tuo materiale con le API Verse, come ad esempio UI Verse e impostare il materiale sugli oggetti scenografici di Fortnite Creativo.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
my_device := class(creative_device):
# Viene eseguito quando il dispositivo viene avviato in un gioco in esecuzione
OnBegin<override>()<suspends>:void=
SpawnLocation := transform:
Translation := vector3{X := 0.0, Y := 0.0, Z := 0.0}
Rotation := IdentityRotation()
Scale := vector3{X := 1.0, Y := 1.0, Z := 1.0}
SpawnPropResult := SpawnProp(DefaultCreativePropAsset, SpawnLocation)
# Il risultato di SpawnProp() è una tupla dove il primo elemento è un oggetto scenografico di Fortnite Creativo opzionale
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMaterial(Materials.MyMaterial)

Material Parameters
Quando crei un materiale e vi aggiungi parametri, questi parametri vengono visualizzati come campi nella classe del materiale . Quando imposti il materiale su una mesh, puoi modificare i parametri del materiale in Verse al runtime.
The following parameter types from your material can be exposed in Verse:
Material Parameters | Verse Type | Description |
---|---|---|
scalar | float |
A single floating point value. |
texture | texture |
A parameter for accessing and setting the texture on a material. |
vector4 | color |
The color struct in Verse only contains three elements, RGB. If you need a fourth element, or to represent the alpha for a color, you'll need to use an additional scalar parameter. |
The following example uses a material named ConcreteMaterial with a vector4 parameter named MyRandomColor.
This is what appears in the Assets.digest.verse file for this material:
ConcreteMaterial_material<scoped {ParameterizedMaterialsTest}> := class<final><public>(material):
var Specular:float = external {}
var WorldPositionOffset:color = external {}
var BaseTexture:texture = external {}
ConcreteMaterial<scoped {ParameterizedMaterialsTest}>:material = external {}
To be able to access and update the parameters on this material, you must instantiate your material in your Verse code first. In the following example, the material is instantiated and then set on a mesh before the parameters are modified.
using { /Fortnite.com/Devices }
using { /Verse.org/Colors }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
# A Verse-authored creative device that spawns three props and randomly changes their color
material_color_test_device := class(creative_device):
# Reference to the parameterized material in the Assets.digest.verse file.
MyParameterizedMaterial:ConcreteMaterial_material = ConcreteMaterial_material{}
OnBegin<override>()<suspends>:void=
Offset:vector3 = vector3:
X := 200.0
Y := 0.0
Z := 0.0
# Spawn several props to apply the material to.
SpawnResult1 := SpawnProp(DefaultCreativePropAsset,GetTransform().Translation, GetTransform().Rotation)
SpawnResult2 := SpawnProp(DefaultCreativePropAsset,GetTransform().Translation + Offset, GetTransform().Rotation)
SpawnResult3 := SpawnProp(DefaultCreativePropAsset,GetTransform().Translation - Offset, GetTransform().Rotation)
# Set the material on each of the props.
if:
Prop1 := SpawnResult1(0)?
Prop2 := SpawnResult2(0)?
Prop3 := SpawnResult3(0)?
then:
Prop1.SetMaterial(MyParameterizedMaterial)
Prop2.SetMaterial(MyParameterizedMaterial)
Prop3.SetMaterial(MyParameterizedMaterial)
# Randomize the color on the parameterized material.
loop:
set MyParameterizedMaterial.MyRandomColor = color:
R := GetRandomFloat(0.0, 1.0)
G := GetRandomFloat(0.0, 1.0)
B := GetRandomFloat(0.0, 1.0)
Sleep(0.20)

VFX Assets and Particle Systems
To be able to reference your Niagara VFX particle system in your Verse code, you must:
- Create your particle system in UEFN.
- Verify that the name of your particle system appears in your project’s Assets.digest.verse file.
You can then spawn the particle system using the SpawnParticleSystem()
function. The following example uses a particle system named MyParticleSystem that was in the subfolder VFX of the project's Content folder.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Assets }
using { /UnrealEngine.com/Temporary/Diagnostics }
# A Verse-authored creative device that spawns a VFX particle system
vfx_test_device := class(creative_device):
# Viene eseguito quando il dispositivo viene avviato in un gioco in esecuzione
OnBegin<override>()<suspends>:void=
loop:
# Spawns a VFX particle system at the given Translation
MyVFX:cancelable = SpawnParticleSystem(MyParticleSystem, GetTransform().Translation)
# Let the VFX play for 3 seconds
Sleep(3.0)
# Stop the VFX
MyVFX.Cancel()
Limitazioni note
Di seguito, sono elencate le attuali limitazioni relative ai riflessi degli asset:
-
Quando utilizzi
SetMesh
su un oggetto scenografico, il materiale della nuova mesh potrebbe non essere visualizzato nell'oggetto scenografico perché alcuni oggetti scenografici nel set di strumenti di Fortnite Creativo hanno un materiale di override definito. Se l'oggetto scenografico non ha materiale di override, quando si modifica la mesh, viene utilizzato il materiale della nuova mesh. -
L'assegnazione dello stesso nome a un asset di un altro identificatore nel progetto comporta errori di compilazione. Ad esempio, un progetto con la struttura mostrata di seguito non viene compilato perché esiste già un asset chiamato "MyMesh" e una cartella chiamata "MyMesh". La cartella o l'asset deve essere rinominato per la compilazione del codice.
-
MyFolder /
-
MyMesh.uasset
-
MyMesh /
- MyOtherMesh.uasset
-
-
Risoluzione dei problemi
Se riscontri problemi con l'aggiornamento del file Assets.digest.verse o con la compilazione del codice di riflessione degli asset, prova le correzioni riportate di seguito.
-
Non utilizzare parole chiave di Verse come 'set' o 'block' come nome di asset o cartelle. Il file Assets.digest.verse crea identificatori Verse da questi nomi. L'utilizzo di una parola chiave come identificatore Verse comporta errori di compilazione. Per un elenco completo delle parole chiave di Verse, vedi il Riferimento rapido al linguaggio Verse.
-
Non utilizzare i nomi delle API Verse o dei membri API come nome di asset o cartelle. Vedi la Guida API Verse.
-
Segui le [convenzioni di denominazione] (verse-code-style-guide-in-unreal-editor-for-fortnite) di Verse quando assegni un nome ai tuoi asset e cartelle, oppure potrebbero essere saltati nella generazione del file digest.
-
Se stai tentando di fare riferimento a un asset al di fuori del suo modulo, potresti ricevere un errore di accesso. Questo perché i moduli hanno lo specificatore
<internal>
specificatore di accesso per impostazione predefinita. Per risolvere l'errore, è necessario aggiungere lo specificatore di accesso<public>
alla dichiarazione del modulo. Se il modulo è stato specificato creando una cartella nel progetto, è necessario modificare l'accessibilità del modulo nel codice. Ad esempio, nella struttura del progetto seguente,Materials
,Meshes
eTextures
sono sottomoduli del moduloWatermelon
.-
MyProject /
-
MiniGame /
-
MiniGameAssets /
-
Watermelon /
-
Materials /
-
Meshes /
- Watermelon.uasset
-
Textures /
-
-
-
-
hello_world_device.verse
-
-
The following code in hello_world_device.verse
changes the Meshes
module's accessibility to public.
MiniGame := module:
MiniGameAssets<public> := module:
Watermelon<public> := module:
Meshes<public> := module {}
Now the project's hello_world_device.verse
file can reference the Watermelon.uasset
in code using the path MiniGame.MiniGameAssets.Watermelon.Meshes.Watermelon
.
Se un identificatore causa un errore nel codice Verse, probabilmente si tratta di un errore associato al nome di un asset o di una cartella. Controlla i potenziali nomi di asset e cartelle digitandoli prima come identificatori nel codice.
Abilitare la riflessione degli asset
Con il rilascio della versione 26.00, la possibilità di esporre gli asset da UEFN a Verse è abilitata per impostazione predefinita per tutti i progetti UEFN appena creati. Per tutti i progetti creati prima della versione 26.00, è invece necessario abilitare questa funzione attenendosi alla procedura seguente:
- Chiudi il progetto in UEFN.
- Individua il file .uplugin nella directory del progetto.
- Apri il file .uplugin in un editor di testo.
- Individua la proprietà EnableVerseAssetReflection e impostala su vero.
- Se tale proprietà non è presente, aggiungi la seguente riga in VersePath:
"EnableVerseAssetReflection" : true,
- Salva il file .uplugin.
- Riapri il progetto in UEFN.