Component에서 부착 Actor의 ASC 가져오기
현재 구조
ElementGaugeComponent (UActorComponent)
└─ GetOwner() → ASovereignCharacter (APawn 상속)
└─ GetPlayerState<ARetrievePlayerState>()
└─ GetRetrieveAbilitySystemComponent() → URetrieveAbilitySystemComponent*
헤더 파일에 ASC 캐싱
// 클래스 내부에 추가
public:
URetrieveAbilitySystemComponent* GetRetrieveASC() const;
private:
// const 함수에서 캐시 갱신할 수 있게 mutable
UPROPERTY(Transient)
mutable TWeakObjectPtr<URetrieveAbilitySystemComponent> CachedASC;
cpp에 ASC 가져오는 함수 구현
URetrieveAbilitySystemComponent* UElementGaugeComponent::GetRetrieveASC() const
{
if (CachedASC.IsValid())
{
return CachedASC.Get();
}
const APawn* OwnerPawn = Cast<APawn>(GetOwner());
if (!OwnerPawn) return nullptr;
ARetrievePlayerState* PS = OwnerPawn->GetPlayerState<ARetrievePlayerState>();
if (!PS) return nullptr;
URetrieveAbilitySystemComponent* ASC = PS->GetRetrieveAbilitySystemComponent();
CachedASC = ASC;
return ASC;
}