보통 작업할 때는 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
}

출처 : UE4 Forums - Opening a Widget Blueprint from C++ Code

728x90

+ Recent posts