ui를 계속 만지면서 유니티와의 차이점을 비교하고 있다.

언리얼에서 ui 구성하는 방식은 c++ 클래스로 부모 클래스를 선언후

위젯 블루 프린트가 그것을 상속 받아서 디자이너 화면에서 작업하는 것이다.

  1. C++ 클래스(UserWidget 상속): 버튼 변수 선언, 클릭 시 실행될 핵심 로직, 서버 데이터 수신 등의 데이터/이벤트 로직을 작성합니다.
  2. 위젯 블루프린트: 위에서 만든 C++ 클래스를 부모로 지정합니다. (Class Settings에서 변경)
  3. 연결: 블루프린트 디자이너 화면에서 버튼을 배치하고, 이름을 C++에서 선언한 변수명과 똑같이 맞춥니다.

1단계: C++ 클래스에서 버튼 변수 선언하기

먼저 UserWidget을 상속받은 C++ 클래스(MyUserWidget.h)를 만들고, 블루프린트에서 사용할 버튼 변수를 선언합니다.

C++

`// MyUserWidget.h #include "Blueprint/UserWidget.h" #include "Components/Button.h" // 버튼 컴포넌트를 쓰기 위해 필수! #include "MyUserWidget.generated.h"

UCLASS() class MYPROJECT_API UMyUserWidget : public UUserWidget { GENERATED_BODY()

protected: // 이 매크로가 핵심입니다. 블루프린트의 위젯 이름과 변수명을 동기화합니다. UPROPERTY(meta = (BindWidget)) class UButton* MyStartButton;

// 위젯이 생성될 때 실행되는 초기화 함수 (블루프린트의 Construct와 대응)
virtual void NativeConstruct() override;

// 버튼 클릭 시 실행될 함수
UFUNCTION()
void OnStartButtonClicked();

};`

2단계: C++에서 이벤트 바인딩하기

이제 헤더에서 선언한 함수를 실제 클릭 이벤트와 연결(Bind)해줍니다.

C++

`// MyUserWidget.cpp void UMyUserWidget::NativeConstruct() { Super::NativeConstruct();

// 버튼 변수가 제대로 연결되었는지 확인 후 이벤트 등록
if (MyStartButton)
{
    MyStartButton->OnClicked.AddDynamic(this, &UMyUserWidget::OnStartButtonClicked);
}

}

void UMyUserWidget::OnStartButtonClicked() { // 버튼 클릭 시 동작할 로직 작성 UE_LOG(LogTemp, Warning, TEXT("C++에서 버튼 클릭을 감지했습니다!")); }`

3단계: 블루프린트의 부모 클래스 변경하기

이제 에디터로 돌아와서 미리 만들어둔 **위젯 블루프린트(WBP)**를 엽니다.

  1. 상단 메뉴의 **[Class Settings (클래스 설정)]**을 클릭합니다.