那些网站是做金融行业,网页设计制作教程,云电子网站开发,wordpress增加导航栏接下来#xff0c;我想实现处理完伤害时#xff0c;将伤害的触发格挡或者触发暴击时的逻辑传递到数据集的PostGameplayEffectExecute里面#xff0c;这样#xff0c;在处理IncomingDamage时#xff0c;我们可以通过释放触发格挡或者触发暴击在UI上面进行对应的效果表现。 …接下来我想实现处理完伤害时将伤害的触发格挡或者触发暴击时的逻辑传递到数据集的PostGameplayEffectExecute里面这样在处理IncomingDamage时我们可以通过释放触发格挡或者触发暴击在UI上面进行对应的效果表现。
当前GE的获取逻辑
在PostGameplayEffectExecute里面我们是通过自定义了一个结构体从Data里面处理并获取了对应的数据。 Data数据的结构体里面共有三项 EffectSpec就是当前使用处理的GE的实例 EvaluatedData 是一个结构体里面包含了应用到目标修改的属性和修改量。我们也是通过这个判断修改的哪个属性 Target 是一个技能组件ASC它的值是应用的目标ASC 在处理时我们是从Data上面获取到GE的上下文句柄然后获取的源的数据而目标数据是从Target获取。 那么这个GE的上下文句柄是在什么时候创建的我们打开生成投掷物的技能类发现这个上下文是在创建GE的实例时生成的然后将GE实例创建出来设置给投掷物身上用于碰撞触发时应用给目标的ASC
FGameplayEffectContextHandle
查看MakeEffectContext方法首先创建FGameplayEffectContextHandle实例然后设置了源的ASC的所有对象和控制对象 在往下深究之前我们先打个断点看一下GE上下文句柄内包含了哪些数据 现在可以看到有些数据是设置的有些没有设置设置的哪些数据就是在MakeEffectContext时设置的。 Data其实就是EffectContext在创建的时候创建的实际上下文。 比如Instigator和EffectCauser的属性是在MakeEffectContext时设置的分别为OwnerActor(PlayerState)和AvatarActor(BP_Aura) 并且技能发起者的ASC也是在设置Actor时候缓存下来的 在设置了发动者的参数时也对应的设置的它们会被复制 这里设置也是在AddInstigator里面实现的 对于一些没有赋值的内容主要是GAS没有主动给我们设置需要我们手动设置 我们没有设置在构造时它也会给我们设置一个默认值 我们还可以看到FGameplayEffectContext类里面给我们设置对应的添加技能和SourceObject等的函数
填充FGameplayEffectContext
查看了源码我们发现还有很多配置没有填充上所以我们先实现将内置这些配置项填充上。 在ProjectileSpell.cpp中我们在创建GE时需要创建GE的上下文句柄我们直接抽离出来创建一个变量方便调用内置函数设置
FGameplayEffectContextHandle EffectContextHandle SourceASC-MakeEffectContext();然后调用一系列的函数尽可能的设置内置的属性
EffectContextHandle.SetAbility(this); //设置技能
EffectContextHandle.AddSourceObject(Projectile); //设置GE的源
//添加Actor列表
TArrayTWeakObjectPtrAActor Actors;
Actors.Add(Projectile);
EffectContextHandle.AddActors(Actors);
//添加命中结果
FHitResult HitResult;
HitResult.Location ProjectileTargetLocation;
EffectContextHandle.AddHitResult(HitResult);
//添加技能触发位置
EffectContextHandle.AddOrigin(ProjectileTargetLocation);接着编译打开UE打开断点查看数值是否都被设置上。