UEFN의 에셋을 Verse로 노출하여 Verse 코드에서 사용할 수 있습니다. 이를 에셋 리플렉션이라고 하며, 이를 사용하여 커스텀 UI에 이미지를 삽입하거나 커스텀 사물에 메시를 사용할 수 있습니다.
에셋을 Verse에 노출할 때 에셋 이름은 컴파일러 심볼인 식별자가 됩니다. 이를 Verse 코드에서 사용할 수 있으며 Verse 경로에서 에셋에 액세스할 수 있습니다. 에셋의 명명은 식별자의 명명 규칙을 따라야 합니다. 프로젝트의 Assets.digest.verse 파일에서 모든 에셋이 Verse에 노출된 것을 볼 수 있습니다.
Assets.digest.verse 파일이 생성되려면 Verse 코드를 빌드하기 전에 프로젝트에 적어도 하나의 Verse 파일이 있어야 합니다.
예를 들어 텍스처 이름이 MyTexture인 경우 Assets.digest.verse 파일에 MyTexture<scoped {MyProject}>:texture_2d = external {}로 표시됩니다.
에셋을 프로젝트 Content 폴더의 하위 폴더에 배치하면 하위 폴더 이름이 Verse 모듈의 이름이 됩니다. 예를 들어 MySphere로 명명한 커스텀 메시를 생성하고 이 메시가 프로젝트 Content 폴더의 Meshes 하위 폴더에 있다면, 코드에서 Meshes.MySphere와 같이 메시 이름을 모듈(하위 폴더) 이름으로 한정해야 합니다.
현재 다음과 같은 에셋 타입을 Verse에 노출할 수 있습니다.
메시
텍스처
머티리얼
나이아가라 VFX 파티클 시스템
다음 섹션에서는 각 에셋 타입을 Verse 코드에서 사용 가능하도록 구성하는 방법을 살펴봅니다.
메시
Verse 코드에서 메시를 참조하려면 다음을 수행해야 합니다.
UEFN에서 스태틱 메시를 모델링하거나 메시를 프로젝트에 임포트합니다.
팹에서 임포트하는 에셋은 수정 가능한 언리얼 엔진 에셋으로 추가되어야 Assets.digest.verse 파일에 표시됩니다. 현재 Verse 코드에서는 팹에서 참조된 에셋을 사용할 수 없습니다.
파일(File) > 모두 저장(Save All)을 선택하여 메시를 저장합니다.
스태틱 메시의 이름이 프로젝트의 Assets.digest.verse 파일에 표시되는지 확인합니다.
그러면 포크리 사물에서 스태틱 메시를 설정하는 등 스태틱 메시를 Verse API와 함께 사용할 수 있습니다.
다음 예시는 게임 시작 시 사물을 생성하는 Verse로 제작된 장치입니다. 이 예시에서는 프로젝트 Content 폴더의 Meshes 하위 폴더에 있는 MySphere라는 스태틱 메시를 사용합니다.
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에 임포트합니다.
팹에서 임포트하는 에셋은 수정 가능한 언리얼 엔진 에셋으로 추가되어야 Assets.digest.verse 파일에 표시됩니다. 현재 Verse 코드에서는 팹에서 참조된 에셋을 사용할 수 없습니다.
파일(File) > 모두 저장(Save All)을 선택하여 텍스처를 저장합니다.
텍스처의 이름이 프로젝트의 Assets.digest.verse 파일에 표시되는지 확인합니다.
그러면 텍스처를 Verse UI와 같은 Verse API에서 사용할 수 있습니다.
머티리얼
Verse 코드에서 머티리얼을 참조하려면 다음을 수행해야 합니다.
UEFN에서 머티리얼을 만듭니다.
머티리얼의 이름이 프로젝트의 Assets.digest.verse 파일에 표시되는지 확인합니다.
그런 다음 Verse UI 및 크리에이티브 사물에 머티리얼을 설정하는 등 Verse API를 통해 머티리얼을 사용할 수 있습니다.
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 타입 | 설명 |
|---|---|---|
단일 부동 소수점 값입니다. | ||
머티리얼의 텍스처에 액세스하고 설정하기 위한 파라미터입니다. | ||
Verse의 |
다음 예시에서는 MyRandomColor로 명명된 vector4 파라미터와 함께 ConcreteMaterial로 명명된 머티리얼을 사용합니다.
이 머티리얼에 대해 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):
VFX 에셋 및 파티클 시스템
Verse 코드에서 나이아가라 VFX 파티클 시스템을 참조하려면 다음을 수행해야 합니다.
UEFN에서 파티클 시스템을 만듭니다.
파티클 시스템의 이름이 프로젝트의 Assets.digest.verse 파일에 표시되어 있는지 확인합니다.
SpawnParticleSystem() 함수를 사용하여 파티클 시스템을 생성할 수 있습니다. 다음 예시에서는 프로젝트의 Content 폴더의 VFX 하위 폴더에 있는 MyParticleSystem이라는 이름의 파티클 시스템을 사용합니다.
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라는 에셋과MyMesh라는 폴더가 있기 때문입니다. 폴더나 에셋의 이름을 변경하여 코드를 컴파일할 수 있습니다.MyFolder /
MyMesh.uasset
MyMesh /
MyOtherMesh.uasset
문제 해결
Assets.digest.verse 파일을 업데이트하거나 에셋 리플렉션 코드를 컴파일하는 데 문제가 발생하는 경우 다음 해결 방법을 시도해 보세요.
Verse 키워드(예:
set또는block)를 에셋이나 폴더의 이름으로 사용하지 마세요. Assets.digest.verse 파일은 이러한 이름으로 Verse 식별자를 생성합니다. 키워드를 Verse 식별자로 사용하면 컴파일 오류가 발생합니다. Verse 키워드 목록은 Verse 언어 퀵 레퍼런스를 참고하세요.Verse API나 API 멤버의 이름을 에셋이나 폴더의 이름으로 사용하지 마세요. Verse API 레퍼런스를 참고하세요.
에셋과 폴더의 이름을 지정할 때 명명 규칙을 따르세요. 그렇지 않으면 다이제스트 파일 생성 시 이를 건너뛰어 버릴 수 있습니다.
에셋이 모듈 외부에서 참조하려는 경우 액세스 오류가 발생할 수 있습니다. 이는 모듈은 기본적으로
<internal>액세스 지정자를 가지고 있기 때문입니다. 오류를 해결하려면 모듈 선언에<public>액세스 지정자를 추가해야 합니다. 프로젝트 내에서 폴더를 생성하여 모듈을 지정한 경우 코드에서 모듈 접근성을 변경해야 합니다. 예를 들어 아래 프로젝트 구조에서Materials,Meshes,Textures는Watermelon모듈의 하위 모듈입니다.MyProject /
MiniGame /
MiniGameAssets /
Watermelon /
Materials /
Meshes /
Watermelon.uasset
Textures /
hello_world_device.verse
hello_world_device.verse에서 아래 코드는 Meshes 모듈의 접근성을 public으로 변경합니다.
MiniGame := module:
MiniGameAssets<public> := module:
Watermelon<public> := module:
Meshes<public> := module {}이제 프로젝트의 hello_world_device.verse 파일에서 MiniGame.MiniGameAssets.Watermelon.Meshes.Watermelon 경로를 사용하여 코드의 Watermelon.uasset 파일을 참조할 수 있습니다.
식별자가 Verse 코드에서 오류를 발생시키면 해당 식별자가 에셋이나 폴더의 이름으로도 오류를 발생시킬 가능성이 높습니다. 가능한 에셋 및 폴더 이름을 먼저 코드의 식별자로 입력하여 확인하세요.
에셋 리플렉션 활성화
26.00 릴리스에서는 새로 생성된 모든 UEFN 프로젝트에 대해 UEFN에서 Verse로 에셋을 노출하는 기능이 기본으로 활성화됩니다. 26.00 이전에 생성한 프로젝트의 경우 다음 단계에 따라 이 기능을 활성화해야 합니다.
UEFN에서 프로젝트를 닫습니다.
프로젝트 디렉터리에서 .uplugin 파일을 찾습니다.
텍스트 에디터에서 .uplugin 파일을 엽니다.
EnableVerseAssetReflection 프로퍼티를 찾아 true로 설정합니다.
해당 프로퍼티가 없는 경우 VersePath 아래에 다음 줄을 추가합니다.
"EnableVerseAssetReflection" : true,.uplugin 파일을 저장합니다.
UEFN에서 프로젝트를 다시 엽니다.