在上一篇文章里,我们实现了添加负面效果GE,并且在添加GE时,也会给角色应用一个负面效果标签作为标识。在这一篇里,我们将通过负面效果标签标识,应用角色身上展现对应的负面效果的表现。
我们将在这篇文章里添加一个自定义的Niagara组件,来实现对应的负面效果表现,并通过观察角色身上是否应用的对应的标签,来激活和取消激活组件。
解决应用标签的bug
首先我们解决之前编写的通过代码设置GE标签的方法。
和之前的相比,有两处问题,第一处就是不应该直接获取,而是直接创建一个新的FInheritedTagContainer。
第二处是在添加的地方需要设置到Added对象上,对应UE里设置GE。
创建自定义的Niagara组件类
为了能够自定义负面效果表现的自动开关功能,我们需要自己扩展Niagara类,在里面增加内容。
我们基于NiagaraComponent创建一个派生类
设定好相关名称和目录
在派生类里,我们添加构造函数,设置标识当前对应的负面效果的标签,以及对应标签变动回调以及角色死亡回调。
在构造函数中,我们将自动激活关闭
在事件开始执行时,我们绑定对应的回调,用来检测角色的变动,并在变动时触发回调
监听负面效果标签的回调里,我们可以获取角色身上对应标签的个数,如果不为0,则激活粒子
在触发死亡回调时,关闭激活
添加对应委托
在自定义Niagara组件里,我们需要两个委托来监听角色身上的负面标签变动以及角色是否死亡
在战斗接口类里,我们增加两个委托,可以通过其进行绑定
Dynamic的区别在于能不能绑定蓝图,非Dynamic的无法绑定,Dynamic的需要通过UE反射绑定,也可以直接蓝图获取绑定。
然后我们在类里增加两个获取函数,可以获取对应的委托,这里我们需要返回引用
接着,我们在角色基类里增加两个对应的委托
覆写两个函数
对其实现一下,返回对应的委托
触发委托
现在我们创建完成了对应的委托,还需要在合适的位置对其进行广播
首先是ASC创建完成后的广播,我选择在InitAbilityActorInfo函数里,创建完成ASC后广播
角色的函数内容不同,在函数执行完时,也完成了广播
然后就是角色的死亡委托广播,我们之前创建了一个多播函数,在角色死亡后,每个游戏端都会触发此函数
在蓝图编辑
接着,我们在角色积累增加一个Niagara组件,设置火的负面效果
在构造函数里初始化,并设置好对应的负面标签
编译打开UE,可以看到,里面增加了对应的组件
我们可以在组件上设置使用的Niagara资产
还可以修改对应的DeBuff标签
实现完成后,我们需要进行测试,测试的主要内容是
- 在激活负面效果时,是否能够正确激活Niagara
- 在负面效果结束时,标签是否能够在角色身上正确清除,Niagara是否能够自动结束
- 在激活负面效果时,角色死亡是否能够自动停止激活等待销毁。
如果都没有问题,基本上效果实现完毕。