언리얼 C++ 프로그래밍

[언리얼 C++] UMG와 UI - 위젯 인터렉션 C++로 제작하기

언린이 2021. 6. 27. 13:47

1. 위젯 블루프린트 생성

위젯 인터렉션을 제작하기 위해서 먼저 위젯 블루프린트를 생성해 줘야 합니다.

위젯 블루프린트 생성은 (UMG와 UI - Viewport에 위젯 띄우기) 글을 참고하시면 됩니다.

 

 

2. 위젯 블루프린트 꾸미기

위젯 블루프린트 클래스를 생성하고 더블클릭하면 블루프린트 디자이너 창이 열리며, 여기서 메뉴 레이아웃을 만들 수 있습니다.

언리얼 엔진에서 여러가지 공용 위젯들을 제공해주는데, 예제에선 버튼과 텍스트 블록을 배치해 보았습니다.

그런 다음 블루프린트의 클래스 세팅에서 C++ 클래스를 부모 클래스로 지정해주었습니다.

(UMG와 UI - Viewport에 위젯 띄우기) 글에서와 마찬가지로 UIMainHUD 클래스를 부모 클래스로 지정해주었습니다.

 

 

3. 위젯 인터렉션 제작하기

class TextProject_API UUIMainHUD : public UUserWidget
{
	GENERATED_BODY()

protected:
	UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = "true"))
	class UButton* TestButton;

	UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = "true"))
	class UTextBlock* TestTextBlock;

protected:
	virtual void NativeOnInitialized();
    
private:
	// 버튼을 눌렀을 때, 호출될 델리게이트에 등록할 함수
	UFUNCTION(BlueprintCallable)
	void TestButtonCallback();
}

부모 클래스로 지정해준 C++ 클래스의 헤더파일에 버튼과 텍스트 블록을 선언해줍니다.

위의 선언부에 선언해준 함수 NativeOnInitialized()는 UUserWidget 클래스를 상속받는 클래스에서 생성자 역할을 하는 함수입니다.

그리고 선언한 TestButtonCallback() 함수는 버튼에 연결해줄 함수로 버튼이 눌렸을때 실행되는 함수입니다.

해당 함수를 블루프린트에서도 호출할 수 있도록 UFUNCTION(BlueprintCallable) 매크로를 사용하여 선언해주었습니다.

 

#include "UIMainHUD.h"
#include "Components/Button.h"
#include "Components/TextBlock.h"

// 위젯 클래스의 생성자
void UUIMainHUD::NativeOnInitialized()
{
	Super::NativeOnInitialized();

	// 위젯 블루프린트의 버튼을 이름을 통해 가져온다
	TestButton = Cast<UButton>(GetWidgetFromName(TEXT("TestButton")));
    
    // 위젯 블루프린트의 텍스트 블록을 이름을 통해 가져온다
	TestTextBlock = Cast<UTextBlock>(GetWidgetFromName(TEXT("TestTextBlock")));

	// 버튼 클릭시 호출될 델리게이트에 함수를 등록한다
	TestButton->OnClicked.AddDynamic(this, &UUIMainHUD::TestButtonCallback);
}

void UUIMainHUD::TestButtonCallback()
{
	// 버튼이 눌렸을때 실행될 내용 구현
}

NativeOnInitialized() 함수에서 GetWidgetFromName 함수를 사용해서 위젯 블루프린트의 공용 위젯들을 이름을 통해 가져옵니다. GetWidgetFromName 함수의 파라미터로 넘겨주는 값은 블루프린트에서 지정해준 위젯의 이름과 동일해야 합니다.

그리고 나서 버튼의 OnClicked 델리게이트에 TestButtonCallback() 함수를 바인딩해주었습니다.

이제 해당 버튼이 클릭되면 바인딩된 함수가 자동으로 실행됩니다.

 

 

이렇게 블루프린트에서 생성한 여러가지 공용 위젯들을 C++ 클래스에서 불러온 후 사용할 수 있으며, 다양한 위젯 인터렉션을 구현하여 사용할 수 있습니다.