UE5/C++ 基于GAS的角色生命值自动恢复Buff

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效果蓝图,附加到角色身上

猜你喜欢

转载自blog.csdn.net/weixin_45500363/article/details/122431302