Вы можете открыть ваши объекты UEFN для Verse и использовать их с помощью кода, написанного в Verse. Это называется отражением ресурсов, и вы можете использовать эту возможность для вставки изображений в пользовательский интерфейс или для применения сеток к пользовательским объектам окружения.
Когда вы делаете ресурс доступным в Verse, его имя становится идентификатором, то есть символом компилятора, который можно использовать в коде Verse; вы можете обращаться к такому ресурсу по его пути Verse. Именование ресурсов должно соответствовать соглашениям об именах для идентификаторов. Все ресурсы, сделанные доступными в Verse, можно просмотреть в файле проекта Assets.digest.verse.
Чтобы файл Assets.digest.verse был сгенерирован, до сборки кода Verse в вашем проекте должен быть хотя бы один файл Verse.
К примеру, если текстуре присвоено название MyTexture, оно будет отражено в файле Assets.digest.verse как MyTexture<scoped {MyProject}>:texture_2d = external {}
.
При размещении ресурсов в подпапках папки Content проекта имя подпапки становится именем модуля Verse. К примеру, когда вы создаёте пользовательскую сетку с именем MySphere и помещаете её в подпапку Meshes папки Content проекта, вы должны добавить к имени сетки имя модуля (подпапки) в коде, например Meshes.MySphere
.
На данный момент вы можете делать доступными в Verse ресурсы следующих типов:
- сетки;
- текстуры;
- Материалы
- Niagara VFX Particle Systems
В следующих разделах описано, как настроить каждый тип ресурсов так, чтобы иметь к ним доступ в коде Verse.
Сетки
Чтобы можно было использовать сетки в коде Verse:
-
Смоделируйте сетку в UEFN или импортируйте сетку в проект.
Ресурсы, которые вы импортируете из Fab, необходимо добавить в качестве модифицируемых ресурсов Unreal Engine, чтобы они были включены в файл Assets.digest.verse. На данный момент невозможно использовать ресурсы из Fab в коде Verse по ссылкам.
- Сохраните сетку, выбрав Файл > Сохранить всё.
- Убедитесь, что имя сетки появилось в проекте в файле Assets.digest.verse.
После этого вы можете использовать сетку с API Verse, например применить сетку к объекту окружения творческого режима.
В следующем примере представлено Verse-устройство, которое создаёт объект окружения при запуске игры. В примере используется сетка MySphere, которая находилась в подпапке Meshes папки Content проекта.
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):
# Выполняется при запуске устройства в работающей игре
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)
# Результатом выполнения SpawnProp() является кортеж, где первый элемент — это необязательный объект окружения творческого режима
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMesh(Meshes.MySphere)
Текстуры
Чтобы можно было ссылаться на текстуру в коде Verse:
- Импортируйте текстуру в UEFN.
Ресурсы, которые вы импортируете из Fab, необходимо добавить в качестве модифицируемых ресурсов Unreal Engine, чтобы они были включены в файл Assets.digest.verse. На данный момент невозможно использовать ресурсы из Fab в коде Verse по ссылкам.
- Сохраните текстуру, выбрав Файл > Сохранить всё.
- Убедитесь, чтобы название текстуры появилось в проекте в файле Assets.digest.verse.
После этого вы можете использовать текстуру с API Verse, например в пользовательском интерфейсе Verse.
Материалы
Чтобы можно было ссылаться на материал в коде Verse:
- Создайте материал в UEFN.
- Убедитесь, что название материала появилось в проекте в файле Assets.digest.verse.
После этого вы можете использовать материал с API Verse, например в пользовательском интерфейсе Verse, и настроить материал на объектах окружения творческого режима.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
my_device := class(creative_device):
# Выполняется при запуске устройства в работающей игре
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)
# Результатом выполнения SpawnProp() является кортеж, где первый элемент — это необязательный объект окружения творческого режима
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMaterial(Materials.MyMaterial)

Material Parameters
Теперь, когда вы создаёте материал и добавляете к нему параметры, они появляются в виде полей у класса материала в файле Assets.digest.verse Assets.digest.verse. Размещая материал на сетке, позже вы сможете изменять параметры материала в Verse в среде выполнения.
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):
# Выполняется при запуске устройства в работающей игре
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()
Известные ограничения
Далее описаны имеющиеся на данный момент ограничения в отношении отражения ресурсов:
-
При применении
SetMesh
к объекту окружения материал новой сетки может на нём не отобразиться, потому что для некоторых объектов окружения в инструментах творческого режима задан переопределяющий материал. Если для объекта нет переопределяющего материала, при изменении сетки будет использоваться материал новой сетки. -
Присвоение ресурсу имени, совпадающего с другим идентификатором в проекте, может вызвать ошибки компиляции. К примеру, проект со структурой, представленной ниже, не скомпилируется, поскольку в нём есть ресурс с именем
MyMesh
и папка с таким же именем. Чтобы код скомпилировался, нужно переименовать папку или ресурс.-
MyFolder /
-
MyMesh.uasset
-
MyMesh /
- MyOtherMesh.uasset
-
-
Устранение неполадок
Если вы получите сообщения об ошибках при обновлении файла Assets.digest.verse или при компиляции кода отражения ресурсов, могут помочь следующие решения.
-
Не используйте ключевые слова Verse, такие как
set
илиblock
, в качестве названий ресурсов или папок. Файл Assets.digest.verse создаёт идентификаторы Verse на основе этих названий. При использовании ключевого слова в качестве идентификатора Verse возникнут ошибки компиляции. Список ключевых слов Verse приведён в Кратком справочнике по Verse. -
Не используйте имена API Verse или API членов в качестве имён ресурсов или папок. См. Справочник по API для Verse.
-
Соблюдайте соглашения об именах Verse при присваивании имён ресурсам и папкам, иначе они будут пропущены при генерировании файла дайджеста.
-
При попытке обращения к ресурсу за пределами этого модуля может возникнуть ошибка доступа. Это происходит из-за того, что по умолчанию модулю присваивается спецификатор доступа
<internal>
. Чтобы исправить эту ошибку, при объявлении модуля нужно указать спецификатор доступа<public>
. IЕсли модуль был задан путём создания папки в проекте, нужно изменить доступность модуля в коде. К примеру, в следующей структуре проектаMaterials
,Meshes
иTextures
являются подмодулями модуляWatermelon
.-
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
.
Если идентификатор вызывает ошибку в коде Verse, скорее всего причина ошибки в имени ресурса или папки. Проверьте предполагаемые имена ресурсов и папок, указав их сначала в коде в качестве идентификаторов.
Включение отражения ресурсов
В выпуске 26.00 возможность делать доступными в Verse ресурсы из UEFN включена по умолчанию для всех новых проектов UEFN. Для любого проекта, созданного до выпуска 26.00, нужно включить эту возможность следующим образом:
- Закройте проект в UEFN.
- Найдите файл .uplugin в каталоге проекта.
- Откройте файл .uplugin в текстовом редакторе.
- Найдите свойство EnableVerseAssetReflection и задайте для него значение true.
- Если такого свойства нет, добавьте следующую строку под VersePath:
"EnableVerseAssetReflection" : true,
- Сохраните файл .uplugin.
- Снова откройте проект в UEFN.