1.在角色身上挂一个UGameplayEffect类型的模板容器,用于在角色蓝图中手动配置GE
UPROPERTY(BlueprintReadOnly, EditDefaultsOnly)
TArray<TSubclassOf<UGameplayEffect>>RecoveryEffect;
2.在角色C++代码文件中,创建两个方法,一个用于执行恢复效果,一个用于终止恢复效果。
方法需传入一个UGameplayEffect类型的参数
//执行恢复效果
void ActivateRecoveryEffect(TSubclassOf<UGameplayEffect> InGameplayEffect)
{
if (GetWorld()->IsServer())
{
if (MMOARPGCharacterBase.IsValid())
{
//创建效果环境
FGameplayEffectContextHandle EffectContext = AbilitySystemComponent->MakeEffectContext();
EffectContext.AddSourceObject(MMOARPGCharacterBase.Get());
//创建效果实例Handle
FGameplayEffectSpecHandle EffectSpecHandle = AbilitySystemComponent->MakeOutgoingSpec(InGameplayEffect,
MMOARPGCharacterBase->GetCharacterLevel(), EffectContext);
if (EffectSpecHandle.IsValid())
{
//应用效果至目标
AbilitySystemComponent->ApplyGameplayEffectSpecToTarget(*EffectSpecHandle.Data.Get(),
AbilitySystemComponent.Get());
}
}
}
}
//终止恢复效果
void DeactivationRecoveryEffect(TSubclassOf<UGameplayEffect> InGameplayEffect)
{
if (GetWorld()->IsServer())
{
//移除效果
AbilitySystemComponent->RemoveActiveGameplayEffectBySourceEffect(InGameplayEffect,
AbilitySystemComponent.Get());
}
}
3.ActivateRecoveryEffect方法,在角色BeginPlay中进行调用。
DeactivationRecoveryEffect方法,在角色死亡时进行调用。
4.打开UE引擎,创建一个GameplayEffect类型的GE蓝图,角色属性需要在此之前准备好
然后将GE效果蓝图,附加到角色身上