UE5/Ability Tasks
[UE5] 적 체력바 구현
Mini_96
2024. 6. 18. 00:12
1. 적 > 위젯콤포넌트 달기
class AURA_API AAuraEnemy : public AAuraCharacterBase, public IEnemyInterface
{
GENERATED_BODY()
...
UPROPERTY(VisibleAnywhere,BlueprintReadOnly)
TObjectPtr<UWidgetComponent> HealthBar;
HealthBar = CreateDefaultSubobject<UWidgetComponent>("HealthBar");
HealthBar->SetupAttachment(GetRootComponent());
*
* data 연결하기
인클루드하고, 변수를 그대로 사용할거임
- 위젯컨트롤러에 의존성이 생기면 안좋지않나? 상호의존성이 아니라 ㄱㅊ
- 리팩토링 : 해당 델리게이트를 다른 클래스에서 관리하도록 리팩토링 해도됨
1. 델리게이트 변수달기
class AURA_API AAuraEnemy : public AAuraCharacterBase, public IEnemyInterface
{
GENERATED_BODY()
public:
AAuraEnemy();
//~Enemy Interface
virtual void HighlightActor() override;
virtual void UnHighlightActor() override;
//~ End Enemy Interface
/**Combat Interface*/
virtual int32 GetPlayerLevel() override;
UPROPERTY(BlueprintAssignable)
FOnAttributeChangedSignature OnHealthChanged;
UPROPERTY(BlueprintAssignable)
FOnAttributeChangedSignature OnMaxHealthChanged;
2. 바인딩전 ASC 초기화된 후에 사용해야함
- 위치선정 : InitInfo 이후가 적절
- 바인딩
void AAuraEnemy::BeginPlay()
{
Super::BeginPlay();
InitAbilityActorInfo();
const UAuraAttributeSet* AuraAS = Cast<UAuraAttributeSet>(AttributeSet);
if(AuraAS)
{
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);
}
);
}
}
* then, 위젯컨트롤러는 어케설정?
적자체를 위젯컨트롤러로 설정하기로 함.
초기값방송
void AAuraEnemy::BeginPlay()
{
Super::BeginPlay();
InitAbilityActorInfo();
if(UAuraUserWidget* AuraUserWidget = Cast<UAuraUserWidget>(HealthBar->GetUserWidgetObject()))
{
AuraUserWidget->SetWidgetController(this); //적 자체를 위젯컨트롤러로 설정! (위젯컨트롤러는 obj임 == 아무거나 될수있음)
}
//위젯컨트롤러 set후 바인딩해야함
const UAuraAttributeSet* AuraAS = Cast<UAuraAttributeSet>(AttributeSet);
if(AuraAS)
{
//속성값 변경시 방송
...
//초기값방송
OnHealthChanged.Broadcast(AuraAS->GetHealth());
OnMaxHealthChanged.Broadcast(AuraAS->GetMaxHealth());
}
}
feat : 적 체력바 구현 · DongHoonYu96/GameplayAbilitySystem_Aura@ae71524
Bisu96 committed Jun 17, 2024
github.com