protected:
TSubclassOf<UUserWidget> MainHUDWidgetClass;
UUIMainHUD* MainHUDWidget;
AMainGameMode::AMainGameMode()
{
static ConstructorHelpers::FClassFinder<UUIMainHUD> MainHUDWidgetAsset(TEXT("WidgetBlueprint'/Game/UI/UI_MainHUD.UI_MainHUD_C'"));
// TSubclassOf 템플릿 클래스 객체에 블루프린트 클래스를 넣어준다
if (MainHUDWidgetAsset.Succeeded())
MainHUDWidgetClass = MainHUDWidgetAsset.Class;
}
void AMainGameMode::BeginPlay()
{
Super::BeginPlay();
if (IsValid(MainHUDWidgetClass))
{
MainHUDWidget = Cast<UUIMainHUD>(CreateWidget(GetWorld(), MainHUDWidgetClass));
if (IsValid(MainHUDWidget))
{
MainHUDWidget->AddToViewport();
}
}
}
헤더파일
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();
}
소스코드
#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()
{
// 버튼이 눌렸을때 실행될 내용 구현
}
감사합니다..... 한 줄기 빛이 되어주셨네요 ㅠㅠ