Podéis mostrar vuestros elementos de UEFN en Verse para usarlos desde vuestro código de Verse. Esto se llama reflejo de recursos, y puedes utilizarlo para insertar imágenes en tu IU personalizada o utilizar mallas para tus elementos personalizados.
Cuando expones un recurso en Verse, el nombre del recurso se convierte en el identificador, un símbolo del compilador que puedes utilizar en tu código de Verse, y puedes acceder al recurso desde su ruta de Verse. La denominación de los recursos debe seguir las convenciones y normas de nomenclatura de 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.
Por ejemplo, si la textura se denomina MyTexture, aparecerá en el archivo Assets.digest.verse como MyTexture<scoped {MyProject}>:texture_2d = external {}
.
Cuando colocas los recursos en subcarpetas de 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 calificar el nombre de la malla con el nombre del módulo (subcarpeta) en el código, como Meshes.MySphere
.
Actualmente, puedes exponer los siguientes tipos de recursos a Verse:
- Mallas
- Texturas
- Materiales
- Niagara VFX Particle Systems
Las siguientes secciones describen 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 el código de Verse, debes:
-
Modela tu malla en UEFN o importa una malla al proyecto.
Los recursos importados desde 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.
- Guarda la malla seleccionando Archivo > Guardar todo.
- Comprueba que el nombre de tu malla aparece en el archivo Assets.digest.Verse de tu proyecto.
A continuación, puedes utilizar tu malla con las API de Verse, como por ejemplo establecer la malla en un elemento del modo Creativo.
El siguiente ejemplo es un dispositivo diseñado en Verse que genera un elemento cuando se inicia el juego. El ejemplo 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 se inicia el dispositivo 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 un elemento opcional del modo Creativo
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMesh(Meshes.MySphere)
Texturas
Para poder hacer referencia a tu textura en el código de Verse, debes:
- Importa tu textura a UEFN.
Los recursos importados desde 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.
- Guarda la textura seleccionando Archivo > Guardar todo.
- Comprueba que el nombre de tu material aparece en el archivo Assets.digest.Verse de tu proyecto.
A continuación, puedes utilizar tu textura con las API de Verse, como la IU de Verse.
Materiales
Para poder hacer referencia a tu material en el código de Verse, debes:
- Crea tu material en UEFN.
- Comprueba que el nombre de tu material aparece en el archivo Assets.digest.Verse de tu proyecto.
A continuación, puedes utilizar tu material con las API de Verse, como la IU de Verse y configurar el material en elementos del modo Creativo.

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 se inicia el dispositivo 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 un elemento opcional del modo Creativo
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMaterial(Materials.MyMaterial)

Material Parameters
Cuando creéis un material y añadáis parámetros, estos aparecerán como cambios en la clase del material en el archivo Assets.digest.verse. Cuando configuréis vuestro material en una malla, luego podréis modificar los parámetros del material en Verse durante el tiempo de ejecución.
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 se inicia el dispositivo 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 recursos:
-
Cuando utilizas
SetMesh
en un elemento, es posible que el material de la nueva malla no aparezca en el elemento porque algunos elementos del conjunto de herramientas del modo Creativo tienen definido un material de anulación. Si el elemento no tiene material de anulación, cuando cambies la malla, se utilizará el material de la nueva malla. -
Dar a un recurso el mismo nombre que otro identificador de tu proyecto provocará errores de compilación. Por ejemplo, un proyecto con la estructura que se muestra a continuación no compilará porque hay un recurso llamado
MyMesh
y una carpeta llamadaMyMesh
. Habría que cambiar el nombre de la carpeta o del recurso para que el código se compilara.-
MyFolder /
-
MyMesh.uasset
-
MyMesh /
- MyOtherMesh.uasset
-
-
Solución de problemas
Si tienes problemas al actualizar tu archivo Assets.digest.verse o al compilar el código de reflexión de tus recursos, prueba las soluciones que se indican a continuación.
-
No utilices palabras clave de Verse, como
set
oblock
en el nombre de los recursos y las carpetas. El archivo Assets.digest.verse crea identificadores de Verse a partir de estos nombres. Utilizar una palabra clave como identificador de Verse provocará errores de compilación. Consulta la Referencia rápida del lenguaje Verse para ver una lista de palabras clave de Verse. -
No utilices los nombres de las API de Verse o de sus miembros como nombre de recursos o carpetas. Consulta la Referencia de la API de Verse.
-
Sigue las convenciones de nomenclatura de Verse cuando nombres tus recursos y carpetas o puede que se omitan en la generación del archivo de compendio.
-
Si intentas hacer referencia a un recurso fuera de su módulo, podrías recibir un error de acceso. Esto se debe a que los módulos tienen el especificador de acceso
<internal>
de forma predeterminada. Para solucionar el error, tienes que añadir el especificador de acceso<public>
a la declaración del módulo. Si el módulo se especificó creando una carpeta en tu proyecto, tienes que 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 causa un error en el código de Verse, probablemente lo hará por el nombre de un recurso o carpeta. Comprueba los posibles nombres de recursos y carpetas escribiéndolos primero como identificadores en el código.
Cómo activar la reflexión de recursos
Con la versión 26.00, la posibilidad de exponer recursos de UEFN en Verse está activada por defecto para todos los proyectos de UEFN de nueva creación. Para cualquiera de tus proyectos creados antes de la versión 26.00, tendrás que activar esta función siguiendo estos pasos:
- Cierra tu 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 actívala.
- Si no existe tal propiedad, añade la siguiente línea en VersePath:
"EnableVerseAssetReflection" : true,
- Guarda el archivo .uplugin.
- Vuelve a abrir tu proyecto en UEFN.