UE4 Gameplay Abilities Plugin

设置

editor 设置

  • 插件启用Gameplay Abilities和GameplayTagsEditor

Native代码设置

  • 要使用此系统的全部功能,添加"GameplayAbilities"、“GameplayTags"和"GameplayTasks"到项目的”(ProjectName).Build.cs"文件中的 PublicDependencyModuleNames 中。
  • 继承实现一个UAttributeSet作为属性集
  • 继承自ACharacterAPown之类的角色文件要同样继承接口IAbilitySystemInterface并添加组件UAbilitySysrtemComponent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "AbilitySystemInterface.h"
#include "AbilitySystemComponent.h"

UCLASS()
class TERRAWANDER_API ACharacterBase : public ACharacter, public IAbilitySystemInterface
{
...

public:
...
virtual UAbilitySystemComponent* GetAbilitySystemComponent()const;
...

protected:
...
// 技能系统组件
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = BaseCharacter)
UAbilitySystemComponent* AbilitySystemComp;

// 属性集
UPROPERTY()
URPGAttributeSet* AttributeSet;
...
}

调用流程

近战攻击例子

  • 继承ACharacter的类中重写PossessedBy中添加初始化技能的函数,当角色被控制器控制时,该函数会被调用
  • PossessedBy()->AddStartupGameplayAbilities()中演示使用GiveAbility()添加技能并放回一个FGameplayAbilitySpecHandle用于触发技能
  • input绑定的输入触发使用技能的流程, AbilitySystemComp->TryActivateAbility(meleeAbilitySpecHandle)演示尝试使用一个技能
  • GameplayAbility对象可以被激活时,进入ActivateAbility事件
  • CommitAbility将应用CD和消耗,PlayMontageandWait将开始播放绑定动画片段
  • Montage播放到一定帧的时候会触发动画通知,动画通知到对应的武器打开碰撞
  • 当武器碰撞触发时将开始攻击判定流程
  • 如果判定流程成功————碰撞到的是第一次碰到的敌人等等,制作GamePlayEventDataSentGamePlayEventtoActor()