

๐ฎ UPlayerUIComponent.h
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnPercentChangedDelegate, float, NwePercent); class IInteractablePropInterface; UCLASS() class BOSSFIGHT_API UPlayerUIComponent : public UPawnUIComponent { GENERATED_BODY() // ์ค๋ต UPROPERTY(BlueprintAssignable) FOnPercentChangedDelegate OnCurrentHealthChanged; };์์ ๊ฐ์ด ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ ์ธํ๊ณ , UPROPERTY(BlueprintAssignable)์ ํตํด ๋ธ๋ฃจํ๋ฆฐํธ์์ ํ ๋น ํ ์ ์๋๋ก ํ์๋ค.
void UBFAttributeSet::PostGameplayEffectExecute(const FGameplayEffectModCallbackData& Data) { if (!CachedPawnUIInterface.IsValid()) { CachedPawnUIInterface = TWeakInterfacePtr<IPawnUIInterface>(Data.Target.GetAvatarActor()); } if (Data.EvaluatedData.Attribute == GetCurrentHPAttribute()) { const float NewCurrentHP = FMath::Clamp(GetCurrentHP(), 0.0f, GetMaxHP()); SetCurrentHP(NewCurrentHP); if (UPlayerUIComponent* PlayerUIComponent = CachedPawnUIInterface->GetPlayerUIComponent()) { PlayerUIComponent->OnCurrentHealthChanged.Broadcast(GetCurrentHP() / GetMaxHP()); } } // ์ค๋ต }์์๊ฐ์ด Player์ HP๊ฐ ๋ณ๋ ํ ๋ OnCurrentHealthChanged๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ Broadcast() ํ๋๋ก ์ฝ๋๋ฅผ ์์ฑ ํ์๋ค.
์ดํ WBP_PlayerUI์์ ํด๋น ๋ธ๋ฆฌ๊ฒ์ดํธ์ ์๋์๊ฐ์ด ๋ ธ๋๋ฅผ ์ฐ๊ฒฐ ํ์๋ค.
GameplayAbility๋ฅผ์ฌ์ฉํ๋ ์ด์ ๋ BeginPlay์์ UI๋ฅผ ๋ถ์ฐฉํด๋ AttributeSet์ด ์์ง ์ด๊ธฐํ ๋์ง ์์์, UI๊ฐ ๊ฐฑ์ ๋์ง ์๊ธฐ ๋๋ฌธ์, Ability๋ฅผ OnGiven์ผ๋ก ์ค์ ํ์ฌ, AbilitySystem ๋ฐ AttributeSet์ด ์ด๊ธฐํ ๋๊ณ ๋์ ์๋ ํ๋๋ก ํ์๋ค.


