- 우선 이게 맞는진 모르겠으나 아래 정리대로 사용을 진행함.
UGameUIRouterSubsystem의 HUDLayoutClass 설정
- 처음 SubSystem이 실행이 될 때 아래 로직이 실행 됩니다.
- 여기에서 HUDLayoutClass를 불러와 화면에 추가합니다.
- 하지만 저 HUDLayoutClass를 설정하는 것은 SubSystem을 따로 BP로 만들지 못하여 세팅하는 함수를 추가하였습니다.
void UGameUIRouterSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
Super::Initialize(Collection);
// LocalPlayer 전용이라 서버에서는 절대 실행되지 않음
if (!HUDLayoutClass) return;
HUDLayout = CreateWidget<UHUDLayoutWidget>(GetWorld(), HUDLayoutClass);
if (HUDLayout)
{
HUDLayout->AddToViewport();
CurrentLayout = EHUDLayout::InGame; // 기본 Layout
}
}
- 아래 로직으로 HUDLayoutClass를 설정.
void UGameUIRouterSubsystem::SetHUDLayoutClass(TSubclassOf<UHUDLayoutWidget> InClass)
{
HUDLayoutClass = InClass;
}
void UGameUIRouterSubsystem::CreateHUD()
{
// LocalPlayer 전용이라 서버에서는 절대 실행되지 않음
if (!HUDLayoutClass) return;
HUDLayout = CreateWidget<UHUDLayoutWidget>(GetWorld(), HUDLayoutClass);
if (HUDLayout)
{
HUDLayout->AddToViewport();
CurrentLayout = EHUDLayout::InGame; // 기본 Layout
}
}
실제 사용 위치
- PlayerController 501 ~ 509
- 아래와 같이 사용되며 이는 경찰과 도둑 게임이 시작될 때 진행하게 됩니다.
if (UGameUIRouterSubsystem* UISub = LP->GetSubsystem<UGameUIRouterSubsystem>())
{
if (!HUDWidgetClass)
{
return;
}
UISub->SetHUDLayoutClass(HUDWidgetClass);
UISub->CreateHUD();
Widget 추가 방법