C++에서 위젯스위처를 획득해야한다.
버튼을 획득하기위해 BindWidget을 했던것과 동일하게 하나 클래스 타입은 해당 오브젝트위에 마우스를 올려놓으면 WidgetSwitcher처럼 나온다. UWidgetSwitcher을 사용하면 됨.
위젯스위처 UWidgetSwitcher*을 이용하여 변수를 선언하고
헤더파일에는 WidgetSwitcher 헤더를 포함시켜서 사용한다.
//Join 버튼에 사용할 클래스
UPROPERTY(meta = (BindWidget))
class UButton* BTN_Join;
//위젯스위처에 사용
UPROPERTY(meta = (BindWidget))
class UWidgetSwitcher* MenuSwitcher;
https://docs.unrealengine.com/4.26/en-US/API/Runtime/UMG/Components/UWidgetSwitcher/
최상단 클래스인 UWidget형으로 선언하며 이름이 같은 대상을 바인드시켜 WidgetSwitcher의 SetActiveWidget 함수의 매개변수로 사용할 수 있도록 한다.
//위젯스위처에 사용
UPROPERTY(meta = (BindWidget))
class UWidgetSwitcher* MenuSwitcher;
//이름이 같은 대상을 찾아 바인드시킨다.
UPROPERTY(meta = (BindWidget))
class UWidget* JoinMenu;
UPROPERTY(meta = (BindWidget))
class UWidget* MainMenu;
버튼을 누를시 호출할 함수를 등록한다 OpenJoinMenu, CloseJoinMenu
bool UMainMenu::Initialize()
{
bool Success = Super::Initialize();
if (!Success) return false;
//To do Here
if (!ensure(BTN_Host != nullptr)) return false;
//UButton의 OnClicked를 BTN_HostOnClicked의 이름의 함수로 델리게이트한다.
BTN_Host->OnClicked.AddDynamic(this, &UMainMenu::Host);
//UButton의 OnClicked를 OpenJoinMenu의 이름의 함수로 델리게이트한다.
BTN_Join->OnClicked.AddDynamic(this, &UMainMenu::OpenJoinMenu);
////UButton의 OnClicked를 CloseJoinMenu의 이름의 함수로 델리게이트한다.
BTN_Cancel->OnClicked.AddDynamic(this, &UMainMenu::CloseJoinMenu);
return true;
}
OpenJoinMenu와 CloseJoinMenu에서 각각 MenuSwitcher의 SetActiveWidget에서 불러올 오브젝트를 넣는다.
void UMainMenu::OpenJoinMenu()
{
if (!ensure(MenuSwitcher != nullptr)) return;
if (!ensure(JoinMenu != nullptr)) return;
MenuSwitcher->SetActiveWidget(JoinMenu);
}
void UMainMenu::CloseJoinMenu()
{
if (!ensure(MenuSwitcher != nullptr)) return;
if (!ensure(MainMenu != nullptr)) return;
MenuSwitcher->SetActiveWidget(MainMenu);
}
'unreal engine' 카테고리의 다른 글
[언리얼엔진] Authotiry와 멀티플레이 관계 (0) | 2022.07.09 |
---|---|
[언리얼엔진] 클라이언트 - 서버 모델, 커맨드로 언리얼 실행 (0) | 2022.07.09 |
[언리얼엔진] 위젯 스위처를 지닌 서브 메뉴 (0) | 2022.03.06 |
[언리얼엔진] 메뉴 버튼 비활성화 (GameModeInput) (0) | 2022.03.03 |
[언리얼엔진] 종속성 반전 인터페이스 (inverting dependencies) (0) | 2022.03.03 |