1. 모듈 추가
PublicDependencyModuleNames.AddRange(new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore",
"UMG"
});
PrivateDependencyModuleNames.AddRange(new string[] {
"Slate",
"SlateCore"
});
언리얼 엔진에서 UMG와 인터페이스를 사용하기 위해서 일단 프로젝트의 Build.cs 파일에서 위에 해당하는 모듈들을 추가해 줘야 합니다.
2. 위젯 블루프린트 생성
유저 인터페이스 카테고리에서 위젯 블루프린트 클래스를 찾을 수 있습니다.
해당 블루프린트 클래스를 생성하고 더블클릭하면 블루프린트 디자이너 창이 열리며, 여기서 메뉴 레이아웃을 만들 수 있습니다.
블루프린트 디자이너 창에서 언리얼 엔진이 제공해주는 여러가지 위젯들을 사용할 수 있습니다.
여러가지 위젯으로 블루프린트를 꾸며준 후 블루프린트의 클래스 세팅에서 C++ 클래스를 부모 클래스로 지정해줍니다.
이번 예제에선 UIMainHUD 클래스를 부모 클래스로 지정해주었습니다.
위젯을 배치한 후 위젯의 이름을 설정해줍니다. Is Variable(변수 인지) 탭을 체크하여 블루프린트의 이벤트 그래프에서 해당 위젯을 불러올 수 있습니다.
3. 생성한 위젯 C++ 클래스에서 사용하기
protected:
TSubclassOf<UUserWidget> MainHUDWidgetClass;
UUIMainHUD* MainHUDWidget;
TSubclassOf은 UClass 타입의 안전성을 보장해주는 템플릿 클래스입니다.
TSubclassOf 템플릿 클래스로 생성한 블루프린트 클래스를 받아온 후 부모 클래스로 지정한 C++ 클래스의 객체에 넣어준 후 사용할 것입니다.
AMainGameMode::AMainGameMode()
{
// 블루프린트 클래스를 받아온다
static ConstructorHelpers::FClassFinder<UUIMainHUD> MainHUDWidgetAsset(TEXT("WidgetBlueprint'/Game/UI/UI_MainHUD.UI_MainHUD_C'"));
// TSubclassOf 템플릿 클래스 객체에 블루프린트 클래스를 넣어준다
if (MainHUDWidgetAsset.Succeeded())
MainHUDWidgetClass = MainHUDWidgetAsset.Class;
}
위의 코드처럼 게임 모드 클래스의 생성자에서 블루프린트 클래스를 받아온 후 TSubclassOf 템플릿 클래스 객체에 넣어줍니다.
void AMainGameMode::BeginPlay()
{
Super::BeginPlay();
if (IsValid(MainHUDWidgetClass))
{
MainHUDWidget = Cast<UUIMainHUD>(CreateWidget(GetWorld(), MainHUDWidgetClass));
if (IsValid(MainHUDWidget))
{
// 위젯을 뷰포트에 띄우는 함수
MainHUDWidget->AddToViewport();
}
}
}
그런 다음 게임 모드의 BeginPlay() 함수에서 TSubclassOf 템플릿 클래스 객체를 사용해 위젯을 생성해준 후 뷰포트에 띄워줍니다.
BeginPlay() 함수는 게임 모드 클래스의 월드 배치가 시작할 때 호출되는 함수입니다.
이렇게 TSubclassOf 템플릿 클래스를 사용하여 개발자가 만든 여러가지 위젯 블루프린트 클래스들을 뷰포트에 띄워줄 수 있습니다.
'언리얼 C++ 프로그래밍' 카테고리의 다른 글
[언리얼 C++] 타이머 사용하기 (2) | 2021.06.28 |
---|---|
[언리얼 C++] UMG와 UI - 위젯 인터렉션 C++로 제작하기 (0) | 2021.06.27 |
[언리얼 C++] 플레이어 입력 환경설정 (0) | 2021.06.25 |
[언리얼 C++] Pawn 커스터마이즈 (0) | 2021.06.24 |
[언리얼 C++] 블루프린트 펑션 라이브러리 (0) | 2021.06.23 |