虚幻引擎UE5 GAS开发RPG游戏-02 设置英雄角色-13 能力激活策略

本文介绍了虚幻引擎GAS(GameplayAbilitySystem)中自定义GameplayAbility的实现方法,主要处理技能的自动激活和移除逻辑。核心内容包括:创建枚举定义两种技能激活策略(OnTriggered事件触发和OnGiven授予时自动激活);重写父类函数OnGiveAbility实现授予时自动激活逻辑,通过AbilitySystemComponent尝试激活技能;重写EndAbility实现技能结束时自动移除逻辑。该设计采用策略模式,通过枚举控制技能激活方式,完整实现了"赋予-激活-结束-移除"的生命周期管理,适用于被动技能和临时效果等场景,体现了GAS的组件化设计和状态管理机制。

1.GAS给予角色能力的流程:

2.

OnTriggered: 通过某种事件触发能力

OnGiven:给予能力后立刻触发

3.创建C++类:

4.创建一个枚举:游戏能力激活策略

Source/Warrior/Public/AbilitySystem/GameplayAbilities/WarriorGameplayAbility.h:

//枚举:游戏能力激活策略
UENUM(BlueprintType)
enum class EWarriorAbilityActivationPolicy :uint8
{
	OnTriggered,
	OnGiven
};

5.创建变量

protected:
	// 游戏能力激活策略
	UPROPERTY(EditDefaultsOnly, Category="WarriorAbility")
	EWarriorAbilityActivationPolicy AbilityActivationPolicy = EWarriorAbilityActivationPolicy::OnTriggered;

6.重写父类函数:

protected:
	//~Begin GameplayAbility Interface
	virtual void OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo,const FGameplayAbilitySpec& Spec) override;
	virtual void EndAbility(const FGameplayAbilitySpecHandle Handle,const FGameplayAbilityActorInfo* ActorInfo,const FGameplayAbilityActivationInfo ActivationInfo,bool bReplicateEndAbility,bool bWasCancelled) override;
	//~End GameplayAbility Interface
	

Source/Warrior/Private/AbilitySystem/GameplayAbilities/WarriorGameplayAbility.cpp:

void UWarriorGameplayAbility::OnGiveAbility(const FGameplayAbilityActorInfo* ActorInfo,
                                            const FGameplayAbilitySpec& Spec)
{
	Super::OnGiveAbility(ActorInfo, Spec);
	if (AbilityActivationPolicy == EWarriorAbilityActivationPolicy::OnGiven)
	{
		if (ActorInfo && !Spec.IsActive())
		{
			ActorInfo->AbilitySystemComponent->TryActivateAbility(Spec.Handle);
		}
	}
}

这段代码是虚幻引擎GAS(Gameplay Ability System)中自定义GameplayAbility类的实现,主要处理技能被赋予时的自动激活逻辑。以下是关键点分析:

核心功能‌:

  • 当技能被赋予(OnGiveAbility)时,检查AbilityActivationPolicy是否为OnGiven策略
  • 满足条件时通过AbilitySystemComponent尝试激活技能(TryActivateAbility)
  • 避免重复激活(!Spec.IsActive()检查)

参数说明‌:

  • FGameplayAbilityActorInfo包含OwnerActor、AvatarActor等关键角色信息
  • FGameplayAbilitySpec存储技能实例数据如Handle和激活状态
  • AbilitySystemComponent是技能系统的核心组件

设计模式‌:

  • 实现被动技能自动激活的典型方案
  • 常用于无需玩家输入触发的常驻效果(如光环类技能)
  • 通过EWarriorAbilityActivationPolicy枚举实现策略模式

该实现体现了GAS的核心机制:技能生命周期管理、组件化设计和策略模式应用。

Source/Warrior/Private/AbilitySystem/GameplayAbilities/WarriorGameplayAbility.cpp:

void UWarriorGameplayAbility::EndAbility(const FGameplayAbilitySpecHandle Handle,
	const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo,
	bool bReplicateEndAbility, bool bWasCancelled)
{
	Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);
	if (AbilityActivationPolicy == EWarriorAbilityActivationPolicy::OnGiven)
	{
		if (ActorInfo)
		{
			ActorInfo->AbilitySystemComponent->ClearAbility(Handle);
		}
	}
}

这段代码是虚幻引擎GAS(Gameplay Ability System)中自定义GameplayAbility的结束逻辑实现,主要处理技能结束时根据激活策略自动移除技能。以下是关键点分析:

核心逻辑‌:

  • 当技能激活策略(AbilityActivationPolicy)为OnGiven时,在技能结束时自动调用ClearAbility移除技能
  • 通过AbilitySystemComponent执行技能清除操作,确保网络同步
  • 包含安全校验(ActorInfo判空)和策略判断双重保护

参数说明‌:

  • Handle用于唯一标识技能实例
  • ActorInfo包含OwnerActor等关键角色信息
  • bReplicateEndAbility控制是否网络同步结束状态
  • bWasCancelled标识是否被强制取消

设计模式‌:

  • 实现一次性被动技能的典型方案
  • 常用于触发后立即移除的临时效果(如消耗类技能)
  • 通过EWarriorAbilityActivationPolicy枚举实现策略模式

该实现体现了GAS的两个重要特性:

1)技能生命周期需显式管理;

2)AbilitySystemComponent作为核心处理器统一管理技能状态。与OnGiveAbility配合使用时,可构成完整的"赋予-激活-结束-移除"流程。

7.创建蓝图子类:

打开蓝图,改变激活策略:

完美!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值