Pueden exponer sus recursos en UEFN a Verse para que puedan usarlos con su código Verse. A esto se lo denomina un reflejo de recursos, y puedes utilizarlo para insertar imágenes en tu IU personalizada o usar mallas para tus utilerías personalizadas.
Cuando expones un recurso a Verse, el nombre del recurso se convierte en el identificador, un símbolo del compilador, que puedes usar en tu código de Verse, y puedes acceder a tu recurso desde su ruta de Verse. Los nombres de los recursos deben seguir las convenciones y reglas de nomenclatura para los identificadores. Puedes ver todos tus recursos expuestos a Verse en el archivo Assets.digest.verse de tu proyecto. .
Para que se genere el archivo Assets.digest.verse, debes tener al menos un archivo de Verse en tu proyecto antes de compilar el código de Verse.
Por ejemplo, si tu textura tiene el nombre MyTexture, aparecerá en tu archivo Assets.digest.verse como MyTexture<scoped {MyProject}>:texture_2d = external {}
.
Cuando colocas tus recursos en subcarpetas en la carpeta Contenido del proyecto, el nombre de la subcarpeta se convierte en el nombre del módulo de Verse. Por ejemplo, cuando creas una malla personalizada llamada MySphere y está en la subcarpeta Mallas de la carpeta Contenido del proyecto, debes indicar el nombre de la malla con el nombre del módulo (subcarpeta) en el código, como Meshes.MySphere
.
Actualmente, puede exponer los siguientes tipos de recursos a Verse:
- Mallas
- Texturas
- Materiales
- Niagara VFX Particle Systems
En las siguientes secciones, se describe cómo configurar cada tipo de recurso para que esté disponible en tu código de Verse.
Mallas
Para poder hacer referencia a tus mallas en tu código de Verse, debes hacer lo siguiente:
-
Modela tu malla en UEFN, o importa una malla a tu proyecto.
Los recursos que importes de Fab deben añadirse como recursos modificables de Unreal Engine para que aparezcan en el archivo Assets.digest.verse. . Actualmente no puedes utilizar recursos referenciados de Fab en tu código de Verse.
- Selecciona Archivo > Guardar todo y guarda la malla.
- Comprueba que el nombre de tu malla aparezca en el archivo Assets.digest.verse de tu proyecto. .
A continuación, puedes utilizar tu malla con las API de Verse, como por ejemplo colocar la malla en una utilería del modo Creativo.
En el siguiente ejemplo, se muestra un Dispositivo creado por Verse que genera una utilería cuando se inicia el juego. En el ejemplo, se utiliza una malla llamada MySphere que estaba en la subcarpeta Mallas de la carpeta Contenido del proyecto.
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):
# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución
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)
# El resultado de SpawnProp() es una tupla, donde el primer elemento es una utilería opcional del modo Creativo
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMesh(Meshes.MySphere)
Texturas
Para poder hacer referencia a tu textura en tu código de Verse, debes hacer lo siguiente:
- Importa tu textura en UEFN.
Los recursos que importes de Fab deben añadirse como recursos modificables de Unreal Engine para que aparezcan en el archivo Assets.digest.verse. . Actualmente no puedes utilizar recursos referenciados de Fab en tu código de Verse.
- Selecciona Archivo > Guardar todo y guarda la textura.
- Comprueba que el nombre de tu textura aparezca en el archivo Assets.digest.verse de tu proyecto. .
A continuación, puedes utilizar tu textura con las API de Verse, como IU de Verse.
Materiales
Para poder hacer referencia a tu material en tu código de Verse, debes hacer lo siguiente:
- Crea tu material en UEFN.
- Comprueba que el nombre de tu material aparezca en el archivo Assets.digest.verse de tu proyecto. .
A continuación, puedes utilizar tu material con las API de Verse, como IU de Verse.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
my_device := class(creative_device):
# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución
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)
# El resultado de SpawnProp() es una tupla, donde el primer elemento es una utilería opcional del modo Creativo
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMaterial(Materials.MyMaterial)

Material Parameters
Cuando creas un material y le añades parámetros, estos aparecen como campos en la clase de material del archivo . Cuando colocas el material en una malla, puedes modificar sus parámetros en Verse al ejecutarlo.
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):
# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución
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()
Limitaciones conocidas
A continuación, se enumeran las limitaciones actuales del reflejo de los recursos:
-
Cuando utilizas
SetMesh
en una utilería, el material de la nueva malla podría no aparecer en la utilería porque algunas utilerías del conjunto de herramientas del modo Creativo tienen un material de anulación definido. Si la utilería no tiene material de anulación, al momento de cambiar la malla, se utiliza el material de la nueva malla. -
Dar a un recurso el mismo nombre que a otro identificador de tu proyecto podría provocar errores de compilación del código de Verse. Por ejemplo, un proyecto con la estructura que se muestra a continuación no compilará porque existe un recurso llamado
MyMesh
y una carpeta llamadaMyMesh
. La carpeta o el recurso deberían renombrarse para que el código compile.-
MyFolder /
-
MyMesh.uasset
-
MyMesh /
- MyOtherMesh.uasset
-
-
Resolución de problemas
Si tienes problemas con la actualización de tu archivo Assets.digest.verse o con la compilación de tu código de reflejo de recursos, prueba las siguientes soluciones.
-
No utilices las palabras clave de Verse como
set
oblock
como nombre de recursos o carpetas. El archivo Assets.digest.verse crea identificadores de Verse a partir de estos nombres. El uso de una palabra clave como identificador de Verse provocará errores de compilación. Consulta la Referencia rápida del lenguaje de Verse para obtener una lista de palabras clave de Verse. -
No utilices los nombres de las API de Verse o los miembros de la API como nombre de recursos o carpetas. Consulta la Referencia de la API de Verse.
-
Sigue las convenciones de nomenclatura de Verse a la hora de nombrar tus recursos y carpetas, o podrían omitirse en la generación del archivo de resumen.
-
Si intentas hacer referencia a un recurso fuera de su módulo, podrías recibir un error de acceso. Esto es porque los módulos tienen el
<internal>
especificador de acceso por defecto. Para corregir el error, tendrás que añadir el especificador de acceso<public>
a la declaración de módulo. Si el módulo se especificó mediante la creación de una carpeta en el proyecto, es necesario cambiar la accesibilidad del módulo en el código. Por ejemplo, en la siguiente estructura de proyecto,Materials
,Meshes
yTextures
son submódulos del móduloWatermelon
.-
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
.
Si un identificador provoca un error en tu código de Verse, es probable que provoque un error como nombre de un recurso o una carpeta. Verifica los posibles nombres de recursos y carpetas escribiéndolos primero como identificadores en el código.
Habilita el reflejo del recurso
Con el lanzamiento de la versión 26.00, la capacidad de exponer recursos de UEFN en Verse está habilitada, de manera predeterminada, para todos los proyectos de UEFN recién creados. Para todo proyecto creado antes de la versión 26.00, tendrás que habilitar esta función siguiendo los siguientes pasos:
- Cierra el proyecto en UEFN.
- Localiza el archivo .uplugin en el directorio del proyecto.
- Abre el archivo .uplugin en un editor de texto.
- Busca la propiedad EnableVerseAssetReflection y establécela en verdadero.
- Si no existe tal propiedad, añade la siguiente línea en VersePath:
"EnableVerseAssetReflection" : true,
- Guarda el archivo .uplugin.
- Abre de nuevo tu proyecto en UEFN.