Вы можете сделать доступными в Verse свои ресурсы из UEFN, чтобы использовать их в коде Verse. Это называется отражением ресурсов, и вы можете использовать эту возможность для вставки изображений в созданный вами интерфейс или для применения сеток к пользовательским объектам окружения.
Когда вы делаете ресурс доступным для Verse, название ресурса становится идентификатором, то есть символом компилятора, который затем можно использовать в коде Verse, и вы можете получить доступ к своему ресурсу по его пути в Verse. Идентификаторы в названиях ресурсов должны соответствовать соглашениям об именах. Все ресурсы, выведенные в Verse, можно просмотреть в файле проекта Assets.digest.verse.
Чтобы файл Assets.digest.verse был сгенерирован, до сборки кода Verse в вашем проекте должен быть хотя бы один файл Verse.
К примеру, если текстуре присвоено название, оно будет отражено в вашем файле Assets.digest.verse как MyTexture<scoped {MyProject}>:texture_2d = external {}.
При размещении ресурсов в подпапках папки Content проекта название подпапки становится названием модуля Verse. К примеру, когда вы создаёте пользовательскую сетку с названием MySphere и помещаете её в подпапку Meshes папки Content проекта, вы должны добавить к названию сетки название модуля (подпапки) в коде, например Meshes.MySphere.
На данный момент вы можете делать доступными в Verse ресурсы следующих типов:
Сетки
Текстуры
Материалы
Визуальные эффекты и системы частиц Niagara
В следующих разделах описано, как настроить каждый тип ресурсов так, чтобы иметь к ним доступ в коде 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):
Текстуры
Чтобы можно было ссылаться на текстуру в коде 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):
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
SpawnLocation := transform:
Параметры материалов
Теперь, когда вы создаёте материал и добавляете к нему параметры, они появляются в виде полей у класса материала в файле Assets.digest.verse. Размещая материал на сетке, позже вы сможете изменять параметры материала в Verse в среде выполнения.
Вы можете вывести в Verse следующие параметры своего материала:
| Параметры материалов | Тип Verse | Описание |
|---|---|---|
Отдельное значение с плавающей запятой. | ||
Параметр для обращения и настройки текстуры материала. | ||
Структура |
В следующем примере используется материал с названием ConcreteMaterial и параметром типа vector4 с названием MyRandomColor.
Вот что появится в файле Assets.digest.verse для этого материала:
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 {}Чтобы можно было обращаться к материалу и обновлять его параметры, вам нужно сначала создать экземпляр своего материала в коде Verse. В следующем примере создаётся экземпляр материала, который затем устанавливается на сетку до изменения параметров.
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):
Ресурсы визуальных эффектов и системы частиц
Чтобы можно было ссылаться на эффекты системы частиц Niagara в коде Verse, выполните следующее:
Создайте систему частиц в UEFN.
Убедитесь, что название вашей системы частиц появилось в файле Assets.digest.verse проекта.
После этого вы можете создать систему частиц с помощью функции SpawnParticleSystem(). В примере используется система частиц MyParticleSystem, которая находилась в подпапке VFX папки Content проекта.
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):
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
Известные ограничения
Далее описаны имеющиеся на данный момент ограничения в отношении отражения ресурсов:
При применении
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>. Если модуль был задан путём создания папки в проекте, нужно изменить доступность модуля в коде. К примеру, в следующей структуре проектаMaterials,MeshesиTexturesявляются подмодулями модуляWatermelon.MyProject /
MiniGame /
MiniGameAssets /
Watermelon /
Materials /
Meshes /
Watermelon.uasset
Textures /
hello_world_device.verse
Следующий код в hello_world_device.verse делает модуль Meshes общедоступным.
MiniGame := module:
MiniGameAssets<public> := module:
Watermelon<public> := module:
Meshes<public> := module {}Теперь файл проекта hello_world_device.verse может ссылаться на Watermelon.uasset в коде, используя путь MiniGame.MiniGameAssets.Watermelon.Meshes.Watermelon.
Если идентификатор вызывает ошибку в коде Verse, скорее всего причина ошибки в имени ресурса или папки. Проверьте предполагаемые имена ресурсов и папок, указав их сначала в коде в качестве идентификаторов.
Включение отражения ресурсов
В выпуске 26.00 возможность делать доступными в Verse ресурсы из UEFN включена по умолчанию для всех новых проектов UEFN. Для любого проекта, созданного до выпуска 26.00, нужно включить эту возможность следующим образом:
Закройте проект в UEFN.
Найдите файл .uplugin в каталоге проекта.
Откройте файл .uplugin файл в текстовом редакторе.
Найдите свойство EnableVerseAssetReflection и задайте для него значение true.
Если такого свойства нет, добавьте следующую строку под VersePath:
"EnableVerseAssetReflection" : true,Сохраните файл файл .uplugin.
Снова откройте проект в UEFN.