UE5 GAS RPG 实现召唤技能数量的限制,并优化技能相关
UE5 GAS RPG 实现召唤技能数量的限制,并优化技能相关
在上一篇文章中,我们实现了召唤技能,并且能够无限的召唤。这显然存在一个bug,因为无限制的召唤会影响游戏体验。因此,在这篇文章中,我们将实现对召唤物数量的限制,并优化相关的内容。
优化召唤物的朝向
首先,我们需要将召唤物的朝向进行优化,避免召唤出来的怪物都是固定的朝向。为了实现这一目标,我们可以根据召唤者的位置,让召唤物的后背朝向召唤者。具体来说,可以通过获取召唤者到召唤物的方向来设置召唤物的朝向。
添加相关代码
接下来,我们需要实现一个功能:当召唤师召唤了一定数量的仆从后,将不再继续召唤仆从,转而使用攻击技能攻击玩家。这意味着召唤师需要拥有两个技能:一个攻击技能和一个召唤技能。
为了区分触发的技能,我们需要为召唤技能设置一个独特的标签。在代码中添加以下内容:
FGameplayTag Abilities_Summon; // 召唤技能激活标签
然后注册到标签管理器,这样在代码中和UE里面都能够使用标签:
GameplayTags.Abilities_Summon = UGameplayTagsManager::Get()
.AddNativeGameplayTag(
FName("Abilities.Summon"),
FString("召唤技能标签")
);
接着,在角色基类上面添加一个属性,用于记录当前角色拥有的仆从数量:
UPROPERTY(BlueprintReadOnly, Category="Combat")
int32 MinionsCount = 0; // 仆从数量
有了属性,我们需要添加一个获取数量的函数。这个函数添加在战斗接口中:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
int32 GetMinionCount(); // 获取角色拥有的仆从数量
在角色基类里覆写它:
virtual int32 GetMinionCount_Implementation() override;
接着我们增加一个可以增加仆从数量的函数,在战斗接口中创建:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
void IncrementMinionCount(const int32 Amount); // 设置角色仆从的增长数量,负数为负增长
然后在角色基类中覆写:
virtual void IncrementMinionCount_Implementation(const int32 Amount) override;
在cpp中,通过传入的数字去修改仆从数量:
void ARPGCharacter::IncrementMinionCount_Implementation(const int32 Amount)
{
MinionCount += Amount;
}
创建新的行为树和任务
上面,我们增加了一些代码,用来实现需求,可以获取也可以设置角色所拥有的仆从的数量。接下来,我们需要创建一个新的行为树,用于修改召唤师敌人的AI逻辑,然后增加一个新的任务,在里面实现是使用召唤技能增加仆从还是使用攻击技能攻击玩家。
首先,将之前制作的行为树复制一份进行修改:
设置好用于元素师专用的行为树:
然后将萨满使用的行为树修改掉:
接着在数据里面给元素师类型的数据添加上攻击技能,这样,在通过标签触发技能的时候,攻击技能就可以通过Attack标签触发,召唤技能可以通过Summon标签触发:
我们将召唤技能的标签修改成召唤标签:
准备工作完成,接下来,我们将修改行为树,我们需要将行为树中的攻击任务修改掉,将其修改成能功判断使用召唤技能还是攻击技能:
接下来,我们复制一个攻击任务,在此基础上扩展:
命名为BTT_Attack_Elementalist:
我们在任务里面新增两个属性标签,一个召唤激活标签,用于激活召唤技能使用,另一个是技能标签,我们通过逻辑修改,激活时,使用它去激活:
我们修改逻辑,增加对于召唤师仆从的数量进行判断,如果小于1, 将进行再次召唤:
true分支是激活召唤技能,false是不需要召唤,那么将使用攻击技能:
最后,激活技能使用AbilityTag去激活:
以下是完整节点:
如果需要修改剩余仆从数量继续召唤的值,我们可以创建一个变量,在行为树中去修改:
接着进入行为树中,将之前的攻击节点替换掉,并修改配置项:
接着,我们进入召唤技能蓝图,在召唤技能蓝图里,我们在每生成一个仆从后,将角色仆从数量加1:
那么,如何实现仆从死亡时,减少数量呢,我们添加监听事件,监听仆从的销毁事件,在其被销毁掉时,将仆从数量减1:
然后绑定销毁事件,在销毁事件触发时,减少一个数量:
接着就可以运行效果,如果萨满能带着五个小弟干你,证明没有问题:
当然,你还要测试将它小弟都解决以后,能不能重新召唤。贴一下完成召唤技能节点: