GAS(GameplayAbilitySystem)
UE提供的一套技能框架,这个框架也不是万能的,甚至各个部件你要进行封装开发,但这也比你从头写一套技能框架要容易很多。
GAS功能极其强大,所以它是一个庞大的系统,如果想运用得当,最好是熟知每一个类的每一个变量如何使用,当然你也可以有选择的熟知大部分细节,也不耽误制作。
ASC(AbilitySystemComponent)
它是GA的底层,通过它Component的名字可以看出,它类似一个组件,加到谁身上,谁就拥有了ASC功能。
GameplayTag
这是UE引擎本身就提供的功能,GAS只是沿用了这个功能。
GA(Gameplay Ability)
表现:GA是在UE里一个继承自GameplayAbility的蓝图类,在实际项目中
GE(Gameplay Effect)
GE相关的名词
GameplayEffect
GameplayEffectExecutionCalculation
GE是什么
表现:GE是在UE里一个继承自GameplayEffect的蓝图类,我创建了一个名为GE_My的蓝图
效果:GE可以理解为Buff与影响的集合,或者说是高级版的Buff
GE生效入口
GameplayAbility
ApplyGameplayEffectSpecToTarget
ApplyGameplayEffectToTarget
ApplyGameplayEffectToOwner
AbilitySystemComponent
ExecuteGameplayEffect
ApplyGameplayEffectSpecToSelf
ApplyGameplayEffectSpecToTarget
ApplyGameplayEffectToSelf
ApplyGameplayEffectToTarget
CMGameplayAbility
MakeEffectContainerSpecFromContainer
MakeEffectContainerSpec
ApplyEffectContainer
ApplyEffectContainerSpec
MakeEffectContextCustom
GetActiveGameplayEffectContext
GE生效流程
GE生效只讲数值类GE,
前面讲了GE的文件创建和生效入口,那接下来就要让GE生效了。
方式1:在GA蓝图里调用ApplyGameplayEffectToOwner即可让GE生效。这种方法缺点比较大,一般在demo里面调试用,就是必须在蓝图里选中要生效哪个GE,在正式的项目中我们有无数个GE,手动选择GE肯定是不行的。
方式2:
GE计算
下面举例一个伤害GE,添加了Modifer的GE生效时,GE_给目标的生命值-15点
正常的项目里肯定不能这么整啊,因为每个人的攻击力都不一样,你咋知道扣多少点呢?
因此,Modifer的方式肯定要抛弃,我们用GE的Execution
GE的Execution就是把属性计算放到C++类里去执行,这个CalculationClass变量就是你自定义的C++类,前提是你的C++类必须继承GameplayEffectExecutionCalculation,才能在蓝图中选中。例如我项目里的UCMDamageCalculation,Calculation类如何知道是谁砍了谁,这里就看一下晕基类方法 Execute
void Execute(const FGameplayEffectCustomExecutionParameters& ExecutionParams, FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const;
一切奥秘在变量FGameplayEffectCustomExecutionParameters内。它提供了上下文关系。
通过FGameplayEffectCustomExecutionParameters拿到攻击方和防守方的ASC,同时就能拿到ASC归属于哪个Character,从而能拿到Character上的所有属性值。
拿到双方属性值,那岂不是可以为所欲为了,想改啥就改啥。
FGameplayEffectCustomExecutionParameters这个属性是从哪传来的
看一下官方文档
GC(GameplayCue)
表现层相关