보통 작업할 때는 TSubclassOf<UUserWidget> 멤버를 만들어서 BP 에서 위젯 경로를 지정하고 그걸 바탕으로 위젯을 생성했다. 테스트 코드라 BP 를 만들 생각이 없어서 코드에서 경로를 지정해서 위젯을 생성하는 방법을 검색했다.
/NewWidgetBlueprint 에 위젯이 있다면 '/Game/NewWidgetBlueprint.NewWidgetBlueprint_C' 형태로 경로를 써줘야 한다.
해당 경로에서 Class 로드는 FStringClassReference::TryLoadClass<T>() 를 사용한다. (현재는 FSoftClassPath 로 이름이 바뀌었다. )
위젯 생성은 CreateWidget<T>(...) 을 사용한다.
FStringClassReference MyWidgetClassRef(TEXT("/Game/NewWidgetBlueprint.NewWidgetBlueprint_C"));
if ( UClass* MyWidgetClass = MyWidgetClassRef.TryLoadClass<UUserWidget>() )
{
UUserWidget* MyWidget = CreateWidget<UUserWidget>(World / GameInstance / PlayerController, MyWidgetClass);
// Do stuff with MyWidget
}
728x90