UserWidget C++ 클래스 생성한다.

 

자동컴파일이 실패한경우 cpp파일에 MainMenu.h 를 포함시킨다.

//자동 생성된 5번 줄을
//#include "MenuSystem/MainMenu.h"

//아래 줄 8번 줄로 바꾼다.
#include "MainMenu.h"

이렇게 바꿔줘야 컴파일이 가능해짐 (버그인듯)

 

 

MainMenu UI의 부모를 재지정 해준다 (C++로)

부모를 변경한 모습.

 

https://benui.ca/unreal/ui-bindwidget/

 

Connect C++ to UMG Blueprints with BindWidget

How to control logic from C++ and configure visuals in Blueprints.

benui.ca

MainMenu.h에서

 

UPROPERTY(meta = (BindWidget))

class UBUTTON* Host; 로 연결을 한다.

//Host 버튼에 사용할 클래스
	UPROPERTY(meta = (BindWidget))
	class UBUTTON* Host;


	//Join 버튼에 사용할 클래스
	UPROPERTY(meta = (BindWidget))
	class UBUTTON* Join;​

 

VS컴파일은 되지만 언리얼에서 오류가 나타난다.

 

이유는 헤더파일의 멤버변수 이름을 캔버스 내의 오브젝트와 같은 이름으로 해줘야한다.

 

캔버스 내의 오브젝트와 클래스 내의 멤버변수의 이름을 동일시 해준다.

 

-- 캔버스 내의 버튼을 C++ 변수에 바인딩 완료 --

 

https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Blueprint/UUserWidget/Initialize/

 

UUserWidget::Initialize

 

docs.unrealengine.com

https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Components/

 

Components

 

docs.unrealengine.com

https://docs.unrealengine.com/4.26/en-US/API/Runtime/UMG/Components/UButton/

 

UButton

The button is a click-able primitive widget to enable basic interaction, you can place any other widget inside a button to make a more complex and interesting click-able element in your UI.

docs.unrealengine.com

 

Initialize에서 사용할 함수들을 델리게이션 해야함.

 

protected:
	virtual bool Initialize();


private:


	//델리게이트 할 함수, Host버튼이 클릭되면 해당 함수가 호출된다
	UFUNCTION()
	void BTN_HostOnClicked();

 

#include "Components/Button.h"

//UMainMenu에서 Initialize를 통해 델리게이트 한다.
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::BTN_HostOnClicked);
	return true;
}

//델리게이트 된 함수, Host버튼이 클릭되면 해당 함수가 호출된다
void UMainMenu::BTN_HostOnClicked()
{
	UE_LOG(LogTemp, Warning, TEXT("호스트 버튼 클릭"));
}

정상적으로 나오는 모습을 볼 수 있다.

 

bonnate