0. 개요
몬스터의 체력 속성을 나타내는 체력 바를 만든다.
1. 체력 바 생성
(1) 몬스터에 WidgetComponent 추가 - AuraEnemy
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
TObjectPtr<UWidgetComponent> HealthBar;
AAuraEnemy::AAuraEnemy()
{
GetMesh()->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block);
AbilitySystemComponent = CreateDefaultSubobject<UAuraAbilitySystemComponent>("AbilitySystemComponent");
// 멀티에서의 복제
AbilitySystemComponent->SetIsReplicated(true);
AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Minimal);
AttributeSet = CreateDefaultSubobject<UAuraAttributeSet>("AttributeSet");
HealthBar = CreateDefaultSubobject<UWidgetComponent>("HealthBar");
HealthBar->SetupAttachment(GetRootComponent());
}
(2) 위젯 블루프린트 생성 - WBP_ProgressBar
사이즈 바에 대해 너비와 높이를 오버라이드하고, 변수로 승격하여 사이즈를 조정할 것이다.

사이즈 박스와 진행 바를 변수로 지정한다.



Width, Height, Front Bar Fill Image 변수들에 대해 기본값을 설정한다.
(3) 위젯을 몬스터 캐릭터에 추가 - BP_EnemyBase
위젯 컴포넌트를 클릭해 아래 옵션에 체크한다.


2. 체력 바에 값 표시하기
(1) 위젯 컨트롤러 - AuraEnemy
위젯에 속성 값을 표시하기 위해서는 위젯 컨트롤러가 필요하다.
몬스터의 체력 바 위젯은 몬스터의 속성을 가져와 표시하기 때문에 몬스터 자체가 위젯 컨트롤러가 될 수 있다.
이전에 속성 오버레이를 만들때 사용했던 시그니쳐를 그대로 사용하기 위해 아래 헤더를 헤더 파일에 추가한다.
#include "UI/WidgetController/OverlayWidgetController.h"
이제 속성 변화 시그니쳐를 사용해 체력 변화, 최대 체력 변화 델리게이트를 만든다.
UPROPERTY(BlueprintAssignable)
FOnAttributeChangedSignature OnHealthChanged;
UPROPERTY(BlueprintAssignable)
FOnAttributeChangedSignature OnMaxHealthChanged;
#include "Components/WidgetComponent.h"
#include "UI/Widget/AuraUserWidget.h"
void AAuraEnemy::BeginPlay()
{
Super::BeginPlay();
InitAbilityActorInfo();
if (UAuraUserWidget* AuraUserWidget = Cast<UAuraUserWidget>(HealthBar->GetUserWidgetObject()))
{
AuraUserWidget->SetWidgetController(this);
}
if (UAuraAttributeSet* AuraAS = CastChecked<UAuraAttributeSet>(AttributeSet))
{
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(AuraAS->GetHealthAttribute()).AddLambda(
[this](const FOnAttributeChangeData& Data)
{
OnHealthChanged.Broadcast(Data.NewValue);
}
);
AbilitySystemComponent->GetGameplayAttributeValueChangeDelegate(AuraAS->GetMaxHealthAttribute()).AddLambda(
[this](const FOnAttributeChangeData& Data)
{
OnMaxHealthChanged.Broadcast(Data.NewValue);
}
);
OnHealthChanged.Broadcast(AuraAS->GetHealth());
OnMaxHealthChanged.Broadcast(AuraAS->GetMaxHealth());
}
}
ASC에서 속성 값 변화를 가져올 수 있으며, 속성은 AttributeSet을 캐스팅하여 가져올 수 있다.
람다 함수를 사용해서 속성 값이 변할 때 새로운 값을 브로드캐스트한다.
그리고 초기화를 위해 현재 값을 마지막에 다시 브로드캐스트한다.
(2) 체력 바 위젯 - WBP_EnemyHealthBar
WBP_ProgressBar를 상속받는 위젯 블루프린트를 생성한다.
이 위젯에서 속성 값을 계산하여 진행도를 변경할 것이다.
(2-1) AuraEnemy 또는 BP_EnemyBase를 변수로 저장
속성 값 변화 이벤트를 활용하기 위해 둘 중의 하나를 변수로 저장한다.

(2-2) 이벤트 바인딩
OnHealthChanged 이벤트로부터 현재 체력, OnMaxHealthChanged 이벤트로부터 최대 체력을 각각 얻어 변수로 승격한다.

(2-3) 나누기 후 진행도 설정
두 값을 Safe Divide 후 진행도로 설정한다.

이 때 Set Percent의 실행 핀은 Set Current Health에 연결한다.
위의 노드를 복사 붙여넣기 후 Set Max Health에 연결한다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
| 10-1. 캐릭터 유형에 따른 속성 값 설정, 클래스 기본 데이터 에셋 (0) | 2024.12.17 |
|---|---|
| 9-11. UI - (7) 줄어드는 체력 바 효과, 체력 바 숨기기 (0) | 2024.12.17 |
| 9-9. 게임플레이 이펙트 클래스 - (6) 투사체 기본 데미지 게임플레이 이펙트 적용하기 (0) | 2024.12.13 |
| 9-8. 투사체 - (4) 투사체 콜리전 채널 설정 (0) | 2024.12.13 |
| 9-7. 투사체 - (3) 적중 시 효과 재생, 몽타주에서 소리 재생 (0) | 2024.12.13 |
