Możecie przenieść swoje zasoby z UEFN do Verse, by używać ich w kodzie Verse. Jest to tak zwane odbicie zasobów i możesz go użyć do wstawienia obrazów do niestandardowego UI lub zastosowania siatek do niestandardowych rekwizytów.
Gdy uwidaczniasz zasób dla Verse, nazwa zasobu staje się identyfikatorem, symbolem kompilatora, którego możesz następnie użyć w kodzie Verse, a dostęp do zasobu można uzyskać z jego ścieżki Verse. Nazewnictwo zasobów powinno być zgodne z konwencjami i zasadami nazewnictwa dla identyfikatorów. Wszystkie zasoby, które są uwidocznione dla Verse, możesz zobaczyć w Assets.digest.verse swojego projektu .
Aby plik Assets.digest.verse został wygenerowany, musisz mieć co najmniej jeden plik Verse w projekcie przed skompilowaniem kodu Verse.
Jeśli na przykład twoja tekstura nazywa się MyTexture, w pliku Assets.digest.verse pojawi się jako MyTexture<scoped {MyProject}>:texture_2d = external {}
.
Gdy umieścisz zasoby w podfolderach w folderze Zawartość projektu, nazwa podfolderu stanie się nazwą modułu Verse. Gdy na przykład tworzysz niestandardową siatkę o nazwie MySphere i znajduje się ona w podfolderze Meshes (Siatki) folderu Zawartość projektu, musisz zakwalifikować nazwę siatki z nazwą modułu (podfolderu) w kodzie, np. Meshes.MySphere
.
Obecnie możesz uwidaczniać dla Verse następujące rodzaje zasobów:
- Siatki
- Tekstury
- Materiały
- Niagara VFX Particle Systems
Z poniższych sekcji dowiesz się, jak skonfigurować każdy rodzaj zasobu, aby był dostępny w kodzie Verse.
Siatki
Aby móc odwołać się do swoich siatek w kodzie Verse, musisz wykonać następujące czynności:
-
Wymodeluj siatkę w UEFN lub zaimportuj siatkę do projektu.
Zasoby, które importujesz z Fab muszą zostać dodane jako modyfikowalne zasoby Unreal Engine, aby pojawiły się w Assets.digest.verse . Obecnie nie możesz używać odwołań do zasobów z Fab w kodzie Verse.
- Zapisz siatkę, wybierając Plik > Zapisz wszystko.
- Sprawdź, czy nazwa siatki pojawia się w Assets.digest.verse projektu .
Następnie możesz użyć siatki za pomocą interfejsów API Verse, np. ustawiając siatkę na rekwizycie trybu kreatywnego.
Poniższy przykład to urządzenie utworzone w Verse, które spawnuje rekwizyt po rozpoczęciu gry. W przykładzie użyto siatki o nazwie MySphere, która znajdowała się w podfolderze Meshes (Siatki) folderu Zawartość projektu.
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):
# Działa po uruchomieniu urządzenia w aktywnej grze
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)
# Wynikiem funkcji SpawnProp() jest krotka, w której pierwszym elementem jest opcjonalny rekwizyt trybu kreatywnego
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMesh(Meshes.MySphere)
Tekstury
Aby móc odwołać się do swoich tekstur w kodzie Verse, musisz wykonać następujące czynności:
- Zaimportuj teksturę do UEFN.
Zasoby, które importujesz z Fab muszą zostać dodane jako modyfikowalne zasoby Unreal Engine, aby pojawiły się w Assets.digest.verse . Obecnie nie możesz używać odwołań do zasobów z Fab w kodzie Verse.
- Zapisz teksturę, wybierając Plik > Zapisz wszystko.
- Sprawdź, czy nazwa tekstury pojawia się w Assets.digest.verse projektu .
Następnie możesz użyć tekstury za pomocą interfejsów API Verse, takich jak UI Verse.
Materiały
Aby móc odwołać się do swoich materiałów w kodzie Verse, musisz wykonać następujące czynności:
- Utwórz swój materiał w UEFN.
- Sprawdź, czy nazwa materiału pojawia się w Assets.digest.verse projektu .
Następnie możesz użyć materiału za pomocą interfejsów API Verse, takich jak UI Verse, i ustawić materiał na rekwizytach trybu kreatywnego.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
my_device := class(creative_device):
# Działa po uruchomieniu urządzenia w aktywnej grze
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)
# Wynikiem funkcji SpawnProp() jest krotka, w której pierwszym elementem jest opcjonalny rekwizyt trybu kreatywnego
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMaterial(Materials.MyMaterial)

Material Parameters
Przy tworzeniu materiałów i dodawaniu do nich parametrów, parametry te pojawiają się jako pola w klasie materiału w pliku Assets.digest.verse. Stosując taki materiał na siatce, możecie modyfikować parametry materiału za pomocą 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 |
Struktura color w Verse zawiera tylko trzy elementy: RGB. Jeśli potrzebujesz czwartego elementu lub chcesz przedstawić alfa dla koloru, musisz użyć dodatkowego parametru skalarnego. |
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):
# Działa po uruchomieniu urządzenia w aktywnej grze
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()
Znane ograniczenia
Poniżej wymieniono aktualne ograniczenia związane z odbijaniem zasobów:
-
Kiedy używasz
SetMesh
na rekwizycie, materiał nowej siatki może nie pojawić się w rekwizycie, ponieważ niektóre rekwizyty w zestawie narzędzi trybu kreatywnego mają zdefiniowany materiał zastępujący. Jeśli rekwizyt nie ma materiału zastępującego, gdy zmienisz siatkę, użyty zostanie materiał nowej siatki. -
Nadanie zasobowi takiej samej nazwy jak innemu identyfikatorowi w twoim projekcie spowoduje błędy kompilacji. Na przykład projekt o strukturze pokazanej poniżej nie skompiluje się, ponieważ istnieje zasób o nazwie
MyMesh
i folder o nazwieMyMesh
. Aby kod mógł się skompilować, należy zmienić nazwę folderu lub zasobu.-
MyFolder /
-
MyMesh.uasset
-
MyMesh /
- MyOtherMesh.uasset
-
-
Rozwiązywanie problemów
Jeśli napotykasz problemy z aktualizacją pliku Assets.digest.verse lub kompilacją kodu odbicia zasobów, wypróbuj poniższe rozwiązania.
-
Nie używaj słów kluczowych Verse takich jak
set
lubblock
jako nazwy jakichkolwiek zasobów lub folderów. Plik Assets.digest.verse tworzy identyfikatory Verse na podstawie tych nazw. Użycie słowa kluczowego jako identyfikatora Verse spowoduje błędy kompilacji. Listę słów kluczowych Verse znajdziesz w Skróconym przewodniku po języku Verse. -
Nie używaj nazw interfejsów API Verse lub elementów członkowskich API jako nazw zasobów lub folderów. Patrz Przewodnik po interfejsie API Verse.
-
Przestrzegaj konwencji nazewnictwa Verse podczas nazywania zasobów i folderów, w przeciwnym razie mogą one zostać pominięte podczas generowania pliku podsumowania.
-
Jeśli próbujesz odwołać się do zasobu poza jego modułem, możesz napotkać błąd dostępu. Powodem tego jest to, że moduły zawierają domyślnie
<internal>
specyfikator dostępu. Aby naprawić błąd, musisz dodać specyfikator dostępu<public>
do deklaracji modułu. Jeśli moduł został określony przez utworzenie folderu w projekcie, musisz zmienić dostępność modułu w kodzie. Na przykład w poniższej strukturze projektuMaterials
,Meshes
iTextures
są podmodułami modułuWatermelon
.-
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
.
Jeśli identyfikator powoduje błąd w twoim kodzie Verse, prawdopodobnie spowoduje błąd jako nazwa zasobu lub folderu. Sprawdź potencjalne nazwy zasobów i folderów, wpisując je najpierw jako identyfikatory w kodzie.
Aktywacja odbijania zasobów
Wraz z wersją 26.00 możliwość uwidaczniania zasobów z UEFN do Verse jest domyślnie włączona dla wszystkich nowo utworzonych projektów UEFN. W przypadku projektów utworzonych w wersji starszej niż 26.00 musisz włączyć tę funkcję, wykonując poniższe czynności:
- Zamknij swój projekt w UEFN.
- Znajdź plik .uplugin w katalogu projektu.
- Otwórz plik .uplugin w edytorze tekstu.
- Znajdź właściwość EnableVerseAssetReflection i ustaw dla niej wartość true.
- Jeśli nie ma takiej właściwości, dodaj następujący wiersz pod VersePath:
"EnableVerseAssetReflection" : true,
- Zapisz plik .uplugin.
- Otwórz ponownie swój projekt w UEFN.