Unreal

Unreal5 UI 요소 사용법

yoosorang 2025. 2. 10. 21:07

📌개요

언리얼 블루프린트 위젯 요소 사용법에 대해 정리하고자 한다.

 

📌프로그래스 바

퍼센트를 통해 막대바를 움직일 수 있으며 다양한 스타일을 설정할 수 있다.
바인딩을 통해 Player의 체력을 반영할 수 있다.

C++로 바인딩할 경우 아래와 같다.

//.h

//전방 선언
class UWidgetComponent;

//헤더 내부
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI")
UWidgetComponent* OverheadHPWidget; //캐릭터에 부착할 위젯 컴포넌트

void UpdateOverheadHP(); //위젯을 업데이트해줄 함수

virtual float TakeDamage( //위젯 업데이트 함수를 부를 함수
    float DamageAmount, 
    struct FDamageEvent const& DamageEvent, 
    class AController* 
    EventInstigator, 
    class AActor* DamageCauser
) override;
//.cpp

#include "Components/WidgetComponent.h"
#include "Components/ProgressBar.h"

//생성자에 넣을 부분
OverheadHPWidget = CreateDefaultSubobject<UWidgetComponent>(TEXT("OverheadHP Widget"));
OverheadHPWidget->SetupAttachment(GetMesh());
OverheadHPWidget->SetWidgetSpace(EWidgetSpace::Screen);

void ACEnemy::UpdateOverheadHP()
{
	if (!OverheadHPWidget) return;

	UUserWidget* OverheadHPWidgetInstance = OverheadHPWidget->GetUserWidgetObject();
	if (!OverheadHPWidgetInstance) return;

	if (UProgressBar* HPBar = Cast<UProgressBar>(OverheadHPWidgetInstance->GetWidgetFromName(TEXT("HP"))))
	{
		HPBar->SetPercent(GetHealth() / GetMaxHealth());
	}

}

float ACEnemy::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
{
	float TempDamageAmount = Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);

	UpdateOverheadHP(); //업데이트 함수 호출
	return TempDamageAmount;
}