UE背包与快捷物品栏之间进行物品交换

(在上一篇背包实现了的基础上进行)

一、功能展示视频

背包、快捷栏功能

二、准备工作

        1.创建快捷栏组件。BP同样为了增强功能的可移植性,我们创建一个ActorComponent类,并将快捷物品栏相关的功能都写在里面,这样子如果其他玩家需要拥有快捷栏这个功能就只需要将这个组件添加给那个玩家就可以了。

        2.创建快捷栏物品的单元格UI(itemslot)。这里可以直接将背包中所使用的单元格(上一篇有提到)复制一份并重命名即可。

        3.创建快捷栏UI。添加包裹框(wrap box),并在其中添加上一步中创建的单元格UI(作为包裹框的元素)。

 

 三、基础功能实现

         1.快捷栏_BP:创建一个数组来存储物品信息,以及一个变量用来表示空物品,数组的类型为此前所创建的用来存储物品信息结构体,初始用空物品来赋予数组元素;它使拥有的功能和背包拥有的功能大相径庭,无非就是初始化、添加物品、交换物品位置、丢弃物品等功能,所以这里不多加说明;

        2.快捷物品单元格UI:大体上功能和背包物品单元格类似,拖拽、鼠标按下、侦察测鼠标拖动函数的重写;

        3.快捷栏UI:主要包含更新快捷栏内容的事件,即首先将包裹框的元素全部删除,然后在根据快捷栏_BP中存储的快捷物品信息来重新创建单元格并添加到包裹框中,作为其元素。

四、重点功能实现

        1.背包物品添加添加到快捷栏:

                当我们拖动背包中某一个物品单元格时,我们将其拖至的位置可以是背包中另一个单元格的位置也可以是快捷栏中某一个单元格的位置,如果是前者,那么接下来就是背包之间的物品交换位置了(上一篇用说明,这里不加说明),如果是后者,那么就涉及到背包与快捷栏之间的物品交换逻辑了;

                因为拖至的位置可以有不同的选择,所以我们就需要在拖拽释放时判断一下释放的位置究竟是在背包中还是在快捷栏中,怎么判断呢?不要忘了我们的背包单元格和快捷栏中的物品单元格不是同一个,所以我们只需要在拖拽释放的时候判断一下目标位置的单元格的类型,如果此单元格是类型是背包单元格,那么就是背包之间的物品交换;相反如果是快捷栏物品单元格的类型,那么就是背包和快捷栏之间的物品交换了,至此我们解决了第一个问题:如何判断物品交换的类型?

                知道了是背包和快捷栏之间的物品交换之后,我们就需要对此交换进行具体的实现了。首先,我们需要记录背包中那个被拖动的单元格在背包中的位置,以及你将其拖动到快捷栏中的目标位置,此外还要记录背包中被拖动的那个单元格的物品信息和快捷栏中目标位置现有的物品信息,并将这四个值作为参数进行传递。

                快捷栏中目标位置的单元格有两种情况,即此单元格已经存储了具体的物品信息,以及此单元格目前只表示一个空物品(没有存储具体的物品信息,即此单元格信息的Name为NULL),那么这里又需要进行分类讨论了,如果目标单元格没有存储具体物品信息,那么就只需要将源单元格(即一开始在背包中被拖动的那个单元格)的物品信息赋予目标单元格(要拖动到的快捷栏的目标单元格),然后源单元格就直接用空白单元格替换,从而实现将物品信息从背包转移到快捷栏;如果目标单元格已经存储了具体的物品信息,此时和前种情况不同的地方就是,源单元格不能用空白单元格替换了,而是要将一开始目标单元格存储的物品信息赋予源单元格,也就相当于将两个物品位置进行了对调。这些操作执行完了之后就需要调用函数来对背包以及快捷栏分别进行一次物品更新了。

        2.快捷栏物品添加到背包:此过程与背包物品添加到快捷栏操作相反(此时源单元格为快捷栏单元格,目标单元格为背包单元格),逻辑相同,故不加说明。

                

 

 

 

                

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值