UEFN'deki öğelerinizi Verse kodunuzla kullanabilmeniz için Verse'e yansıtabilirsiniz. Bu işleme öğe yansıtma adı verilir ve bu özelliği kullanarak özel kullanıcı arabirimine görüntüler ekleyebilir veya özel nesnelerin için örgüler kullanabilirsin.
Bir öğeyi Verse’te kullanıma açtığında öğenin adı daha sonra Verse kodunda kullanabileceğin bir derleyici sembolü biçimindeki tanımlayıcı olur. Bu öğene Verse Yolundan erişebilirsin. Öğeler adlandırılırken tanımlayıcılara yönelik adlandırma gelenekleri ve kuralları kullanılmalıdır. Verse’te kullanıma açılan öğelerinin tümünü, projenin Assets.digest.verse dosyasında görebilirsin.
Assets.digest.verse dosyasının oluşturulması için, Verse kodunu oluşturmadan önce projende en az bir Verse dosyası olmalıdır.
Örneğin, dokunun adı MyTexture ise Assets.digest.verse dosyanda MyTexture<scoped {MyProject}>:texture_2d = external {}
olarak görünür.
Öğelerini İçerik klasöründeki alt klasörlere yerleştirdiğinde Verse modülü ilgili alt klasörün adını alır. Örneğin, MySphere adlı özel bir örgü oluşturduğunda bu, projenin İçerik klasöründeki Örgüler alt klasöründe bulunuyorsa örgünün adını koddaki modül (alt klasör) adıyla (Meshes.MySphere
gibi) nitelemen gerekir.
Şu anda aşağıdaki türdeki öğeleri Verse’te kullanıma açabilirsin:
- Örgüler
- Dokular
- Materyaller
- Niagara VFX Particle Systems
Aşağıdaki bölümlerde, bu türlerdeki öğeleri Verse kodunda kullanılabilecek şekilde nasıl ayarlayacağın anlatılmaktadır.
Örgüler
Örgülerine Verse kodunda başvurabilmek için şunları yapman gerekir:
-
Örgünü UEFN’de modelle veya projene bir örgü aktar.
Fab’dan içe aktardığın öğelerin Assets.digest.verse dosyasında gösterilmesi için değiştirilebilir bir Unreal Engine öğesi olarak eklenmelidir. Şu anda Fab'dan başvurulan öğeleri Verse kodunda kullanamazsın.
- Dosya > Tümünü Kaydet’i seçerek örgüyü kaydet.
- Örgünün adının, projenin Assets.digest.verse dosyasında göründüğünü doğrula.
Bundan sonra örgünü Verse API’larıyla kullanabilirsin. Örneğin, örgüyü bir Kreatif nesnesinde ayarlayabilirsin.
Aşağıda, oyun başladığında nesne üreten bir Verse ile yazılmış cihaz örneği verilmiştir. Örnekte, projenin İçerik klasörünün Örgüler alt klasöründe bulunan MySphere adlı bir örgü kullanılmaktadır.
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):
# Cihaz, çalışmakta olan bir oyunda başlatıldığında çalışır
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() sonucu, birinci öğesi isteğe bağlı bir kreatif nesnesi olan bir demettir
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMesh(Meshes.MySphere)
Dokular
Dokuna Verse kodunda başvurabilmek için şunları yapman gerekir:
- Dokunu UEFN’e aktar.
Fab’dan içe aktardığın öğelerin Assets.digest.verse dosyasında gösterilmesi için değiştirilebilir bir Unreal Engine öğesi olarak eklenmelidir. Şu anda Fab'dan başvurulan öğeleri Verse kodunda kullanamazsın.
- Dosya > Tümünü Kaydet’i seçerek dokuyu kaydet.
- Dokunun adının, projenin Assets.digest.verse dosyasında göründüğünü doğrula.
Bundan sonra dokunu Verse Kullanıcı Arayüzü gibi Verse API’larıyla kullanabilirsin.
Materyaller
Materyaline Verse kodunda başvurabilmek için şunları yapman gerekir:
- UEFN’de materyalini oluştur.
- Materyal adının, projenin Assets.digest.verse dosyasında göründüğünü doğrula.
Bundan sonra materyalini Verse API’larıyla kullanabilirsin. Örneğin, Verse Kullanıcı Arayüzünde kullanabilir ve materyali kreatif nesneler üzerinde ayarlayabilirsin.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
my_device := class(creative_device):
# Cihaz, çalışmakta olan bir oyunda başlatıldığında çalışır
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() sonucu, birinci öğesi isteğe bağlı bir kreatif nesnesi olan bir demettir
if (SpawnedProp := SpawnPropResult(0)?):
SpawnedProp.SetMaterial(Materials.MyMaterial)

Material Parameters
Bir materyal oluşturup parametreler eklediğinizde o parametreler, Assets.digest.verse dosyasında materyal sınıflarındaki alanlar olarak eklenmelidir. Materyalinizi örgüye ekledikten sonra Verse çalışma zamanında materyalin parametrelerini düzenleyebilirsiniz.
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):
# Cihaz, çalışmakta olan bir oyunda başlatıldığında çalışır
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()
Bilinen Kısıtlamalar
Öğe yansıtmanın bilinen kısıtlamaları aşağıda listelenmiştir:
-
Bir nesne üzerinde
SetMesh
kullandığında, Kreatif araç setindeki bazı nesneler için tanımlanmış bir geçersiz kılma materyali olursa yeni örgünün materyali nesne üzerinde görünmeyebilir. Nesnenin geçersiz kılma materyali yoksa örgüyü değiştirdiğinde yeni örgünün materyali kullanılır. -
Bir öğeye projendeki başka bir tanımlayıcıyla aynı adı vermek derleme hatalarına neden olabilir. Örneğin, aşağıda gösterilen yapıya sahip proje,
MyMesh
adlı bir öğe veMyMesh
adlı bir klasör mevcut olduğundan derlenmeyecektir. Kodun derlenebilmesi için klasörün veya öğenin yeniden adlandırılması gerekir.-
MyFolder /
-
MyMesh.uasset
-
MyMesh /
- MyOtherMesh.uasset
-
-
Sorun Giderme
Assets.digest.verse dosyanızı güncelleme veya öğe yansıtma kodunu derlemeyle ilgili sorunlar yaşıyorsan aşağıdaki çözümleri dene.
-
set
veyablock
gibi Verse anahtar sözcüklerini herhangi bir öğenin ya da klasörün adı olarak kullanma. Assets.digest.verse dosyası bu adlardan Verse tanımlayıcıları oluşturur. Bir anahtar sözcüğü Verse tanımlayıcısı olarak kullanmak derleme hatalarına neden olur. Verse anahtar sözcüklerinin listesi için Verse Dili Hızlı Başvuru bölümüne bakabilirsin. -
Verse API’larının veya API üyelerinin adlarını öğe ya da klasör adı olarak kullanma. Verse API Başvurusu bölümüne bak.
-
Öğelerini ve klasörlerini adlandırırken Verse adlandırma kurallarına uymaman durumunda özet dosyası oluşturulurken bunlar atlanabilir.
-
Bir öğeye modülünün dışında başvurmayı deniyorsan bir erişim hatası alabilirsin. Bunun nedeni, modüllerin varsayılan olarak
<internal>
erişim belirleyicisine sahip olmasıdır. Hatayı düzeltmek için modül tanımına<public>
erişim belirleyicisini eklemen gerekir. Modül, projende bir klasör oluşturularak belirtildiyse kodundaki modül erişilebilirliğini değiştirmen gerekir. Örneğin, aşağıdaki proje yapısındaMaterials
,Meshes
veTextures
değerleriWatermelon
modülünün alt modülleridir.-
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
.
Bir tanımlayıcı, Verse kodunda hataya neden oluyorsa bunun nedeni muhtemelen bir öğe veya klasörün adıdır. Öncelikle olası öğe ve klasör adlarını koddaki tanımlayıcılar şeklinde yazarak kontrol et.
Öğe Yansıtmayı Etkinleştirme
26.00 sürümüyle birlikte tüm yeni oluşturulan UEFN projeleri için UEFN’deki öğeleri Verse’te kullanıma açma özelliği etkindir. 26.00 sürümü öncesinde oluşturulan projelerin için bu özelliği etkinleştirmek istersen aşağıdaki adımları izle:
- UEFN’de projeni kapat.
- Proje dizininde .uplugin dosyasını bul.
- .uplugin dosyasını bir metin editöründe aç.
- EnableVerseAssetReflection özelliğini bul ve true olarak ayarla.
- Böyle bir özellik yoksa VersePath altına aşağıdaki satırı ekle:
"EnableVerseAssetReflection" : true,
- .uplugin dosyasını kaydet.
- Projeni UEFN’de tekrar aç.