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());
}
}
'UE5 > Ability Tasks' 카테고리의 다른 글
[UE5] AbilityTask 퀴즈 (0) | 2024.06.18 |
---|---|
[UE5] 데미지 입히기 구현 // fix : 시작시불쏘는버그, 불에서벗어나도 체력깍이는버그 (0) | 2024.06.16 |
[UE5] 발사체와 충돌할 대상 정리 (0) | 2024.06.15 |
[UE5] 발사체 이펙트, 소리, 수명 구현 (0) | 2024.06.15 |
[UE5] 발사체 방향으로 캐릭회전 구현 (0) | 2024.06.15 |