virtual void PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data) override;
example 1:
Data.EvaluatedData.magnitude//记录GE过程值的差值

example 2:
void UAuraAttributeSet::PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data)
{
Super::PostGameplayEffectExecute(Data);

FEffectProperties Props;
SetEffectProperties(Data, Props);

}
void UAuraAttributeSet::SetEffectProperties(const FGameplayEffectModCallbackData& Data, FEffectProperties& Props) const
{
Props.EffectContextHandle = Data.EffectSpec.GetContext();
Props.SourceASC = Props.EffectContextHandle.GetOriginalInstigatorAbilitySystemComponent();

if (IsValid(Props.SourceASC) && Props.SourceASC->AbilityActorInfo.IsValid() && Props.SourceASC->AbilityActorInfo->AvatarActor.IsValid())
{
Props.SourceAvatarActor = Props.SourceASC->AbilityActorInfo->AvatarActor.Get();
Props.SourceController = Props.SourceASC->AbilityActorInfo->PlayerController.Get();
if (Props.SourceController == nullptr && Props.SourceAvatarActor != nullptr)
{
if (const APawn* Pawn = Cast<APawn>(Props.SourceAvatarActor))
{
Props.SourceController = Pawn->GetController();
}
}
if (Props.SourceController != nullptr)
{
ACharacter* SourceCharacter = Cast<ACharacter>(Props.SourceController->GetPawn());
}
}

if (Data.Target.AbilityActorInfo.IsValid() && Data.Target.AbilityActorInfo->AvatarActor.IsValid())
{
Props.TargetAvatarActor = Data.Target.AbilityActorInfo->AvatarActor.Get();
Props.TargetController = Data.Target.AbilityActorInfo->PlayerController.Get();
Props.TargetCharacter = Cast<ACharacter>(Props.TargetAvatarActor);
Props.TargetASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(Props.TargetAvatarActor);
}
}


USTRUCT(BlueprintType)
struct FEffectProperties
{
GENERATED_BODY()

FEffectProperties() {}

FGameplayEffectContextHandle EffectContextHandle;

UPROPERTY()
UAbilitySystemComponent* SourceASC = nullptr;

UPROPERTY()
AActor* SourceAvatarActor = nullptr;

UPROPERTY()
AController* SourceController = nullptr;

UPROPERTY()
ACharacter* SourceCharacter = nullptr;

UPROPERTY()
UAbilitySystemComponent* TargetASC = nullptr;

UPROPERTY()
AActor* TargetAvatarActor = nullptr;

UPROPERTY()
AController* TargetController = nullptr;

UPROPERTY()
ACharacter* TargetCharacter = nullptr;
};
posted on 2025-08-22 10:38  偷懒的阿贤  阅读(5)  评论(0)    收藏  举报