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/

 

UWidgetSwitcher

A widget switcher is like a tab control, but without tabs. At most one widget is visible at time.

docs.unrealengine.com

 

최상단 클래스인 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);
}
bonnate