在上一篇里,我们实现了在技能面板,点击技能能够显示出技能的相关描述以及下一级的技能的对应描述。
在这一篇里,我们实现一下技能的装配。
在之前,我们实现了点击按钮时,在技能面板控制器里存储了当前选中的技能的相关信息,有了这个信息以后,我们在实现装配时,可以使用这个数据进行处理。
当选中技能后,我们接着点击下面的技能插槽时,如果符合装配条件,我们将实现装配到对应的插槽。
添加技能类型配置
在技能装配这里,我们分了主动技能和被动技能,不同类型的技能无法装配。所以,我们需要在技能数据里设置对应的类型,我们还是使用类型标签设置
我们在技能数据结构体内增加一个配置项,用于设置类型
然后在标签管理这里,增加三项,主动技能,被动技能和空
并且注册到标签管理器
接着打开UE,在技能配置里,设置技能的对应类型
添加技能装配事件触发
我们也注意到,技能分为两大类型,主动技能和被动技能,为了区分它们,我们需要设置对应的类型标签。
首先在装配按钮这里添加可设置的类型变量,注意把眼睛打开。
然后在外部设置它对应的类型
被动技能也设置
然后给按钮绑定一个点击事件
添加技能装配处理逻辑
我们需要在技能面板控制器里增加一个点击按钮,用来实现点击事件
在实现这里,我首先判断条件是否达成,然后调用ASC里的实际处理技能装配的逻辑
接着,我们在ASC里增加多个函数,用于实现这个逻辑,为什么在ASC里,因为GA是属于GAS系统的,GAS相关的内容就放在GAS相关的类里实现处理
首先,我们看一下后面三个函数,他们是为了处理技能实现的函数。
首先是AbilityHasSlot,需要传入一个技能实例和一个输入标签(插槽标识),用来判断技能是否属于这个插槽
然后就是清除掉技能的装配的插槽,其实就是清除掉GA的输入标签
然后就是根据输入标签(插槽)清除掉所有技能的对应的插槽,这个会用到上面的两个函数。
接下来就是装配函数,我们先获取到需要装配的技能实例,获取到当前装配的插槽和当前的技能的状态标签,然后将需要装配到的目标插槽的的技能清除掉,并将技能自身的插槽清除,并将对应的标签修改掉。然后触发客户端的调用,并及时将技能的修改复制到客户端(当前执行只在服务器运行,客户端不会运行,只需要将结果复制到即可)
在客户端,我们只进行一个委托的广播,然后让控制器监听去修改
所以,我们增加一个技能装配后的委托
然后在客户端执行的函数里进行调用
在控制器接收技能装配委托
接下来我们要在控制器实现对技能装配委托的监听,考虑到,技能装配后,在技能面板和Overlay里都需要使用它,我们将函数写到基类里,然后在对应的控制器里进行监听绑定。
我们在控制器基类增加一个委托回调函数
然后,在实现里,我们通过传递过来的标签,实现技能数据的广播,然后在UI监听更新
我们在需要监听的派生类里,添加对其的监听
编译打开代码,我们在数据接收这里,增加,在判断是否为对应插槽的更新数据,如果技能标签为空,则是清除旧插槽。
在技能按钮里,还需要多做一步操作就是处理技能冷却的监听处理
解决降级为0级技能还装配的问题
当技能等级降级为0级以后,技能的装配变为了无法装配,我们需要将此信息同步到技能栏和装配技能栏。
所以我们在降级函数中,将其增加一个委托,再调用客户端更新
接下来是效果展示