UserWidget C++ 클래스 생성한다.
자동컴파일이 실패한경우 cpp파일에 MainMenu.h 를 포함시킨다.
//자동 생성된 5번 줄을
//#include "MenuSystem/MainMenu.h"
//아래 줄 8번 줄로 바꾼다.
#include "MainMenu.h"
이렇게 바꿔줘야 컴파일이 가능해짐 (버그인듯)
MainMenu UI의 부모를 재지정 해준다 (C++로)
부모를 변경한 모습.
https://benui.ca/unreal/ui-bindwidget/
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/
https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Components/
https://docs.unrealengine.com/4.26/en-US/API/Runtime/UMG/Components/UButton/
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("호스트 버튼 클릭"));
}
정상적으로 나오는 모습을 볼 수 있다.
'unreal engine' 카테고리의 다른 글
[언리얼엔진] 메뉴 버튼 비활성화 (GameModeInput) (0) | 2022.03.03 |
---|---|
[언리얼엔진] 종속성 반전 인터페이스 (inverting dependencies) (0) | 2022.03.03 |
[언리얼엔진] 커스텀 버튼과 폰트 (0) | 2022.02.28 |
[언리얼엔진] ue4 위젯 레이아웃 고급기능 (0) | 2022.02.27 |
[언리얼엔진] ue4 위젯 UI 입력 모드 변경하기 (입력모드, 커서보이기) (0) | 2022.02.27 |