CDO를 제작하는 생성자 코드에서 애셋에 관련된 정보를 불러올 때에는

ConstructorHelpers라는 특수한 클래스를 사용합니다.


이 클래스는 애셋 내 가져올 종류에 따라 ObjectFinder와 ClassFInder라는 두 API를 제공하는데,

1. ClassFinder는   애셋의 형(Type) 정보를 가져올 때

2. ObjectFinder 애셋의 내용물을 가져올 때

( 이는 하나의 언리얼 오브젝트가 UClass와 CDO로 나누어진다는 것을 다시 되새기면 이해가 가실 겁니다. ) 

 

static ConstructorHelpers::FObjectFinder<USkeletalMesh> SK_BlackKnight(
TEXT("SkeletalMesh'/Game/InfinityBladeWeapons/Weapons/Blade/Swords/Blade_BlackKnight/SK_Blade_BlackKnight.SK_Blade_BlackKnight'"));

 

먼저 ConstructorHelpers 클래스는 말 그대로 생성자(Constructor)에서만 사용이 가능합니다.

즉 CDO 제작에만 사용된다는 이야기지요. 
만일 게임플레이 런타임에서 애셋을 로딩하기 위해서는 ConstructorHelper가 아닌 
StaticLoadObject와 같은 다른 API를 사용하여야 합니다.

이렇게 애셋을 로딩 시점을 1. 엔진 초기화 런타임과 2. 게임플레이 런타임으로 구분하는 이유는, 안전을 위해서입니다. 

일반적으로 컨텐츠에서 사용하는 애셋들은 엔진 초기화 시점에서 우리가 사용할 애셋이 확실히 존재하는지 검증하고 다음 단계를 진행하는 것이 안전합니다. 

만일 런타임에서 애셋을 로딩하게 된다면 예기치 않은 문제들이 발생할 수 있습니다. 
예를 들어 우리가 제작한 무기를 게임 플레이 런타임에서 로딩한다면, 캐릭터가 등장하고 열심히 탐험하고 몬스터 공격을 위해 칼을 빼들 때야 비로서 로딩을 시작하겠지요. 그런데 이 때 칼 애셋이 없는 경우에는 잘못해서 콘텐츠가 크래시가 일어날 수 있습니다. 

불러들이는 애셋의 경로는 특별한 이유가 없다면 로딩된 이후에 변경될 일이 없을테니, 사용할 애셋들은 ConstructorHelpers 클래스를 사용해 애셋의 유무를 미리 확인하고 로딩하는 것이 좋습니다. 

 

+ Recent posts