背包:道具捡起与丢弃
道具对象创建好以后,我们将他们布置在场景中,选中道具后拖入即可,相同的道具可以多布置几个,如图:
优化
再开始写今天的功能之前,我们先对之前的功能先进行优化,首先优化的是创建背包和打开背包的蓝图逻辑。
之前每次打开背包都会去创建一个背包 Widget 对象,现在优化为在角色蓝图函数里的 Event Begin Play 中去创建 Widget,然后打开背包的时候再去 AddToViewPort。
优化后的蓝图逻辑如图:
这里的蓝图逻辑需要添加 IsInventoryAdded 布尔变量,用于判读该 Widget 有没有被添加进视图。
捡起道具
当角色走近道具的时候,为了能够获取到碰撞信息,我们需要给角色添加一个 Sphere Collision 命名为 Collection Range, 并调整它的 Radius 为 100,如图:
添加 PickUp 事件,设置如下:
然后打开角色蓝图,开始绘制它的蓝图逻辑,逻辑如下:
当角色移动到地面上道具附近的时候,按下 F 键,该道具的值就记录在道具背包数组中。
蓝图逻辑讲解如下:
- 通过 GetOverLappingActors 来获取碰撞的 Actors,通过过滤 Class 来过滤掉不需要的碰撞 Actor,得到一个碰撞 Actor 数组
- 通过 For Each Loop 遍历这个碰撞的 Actor 数组元素。然后,再将获取到的元素与背包中已存在的道具(用 InventoryData 来存储)进行比较
- 如果比较下来 Class Reference 相等,则表示当前背包中已存在该商品,只需要将该道具的数量加 1
- 如果比较下来没有找到相同的,则在 InventoryData 数组中添加一个记录, 并设置它的 Class Reference 和数量
- 最后调用 DestoryActor 函数将碰撞到的 Actor 销毁
在将背包 AddToViewPort 的时候,根据背包数组中记录的值去构建背包的视图,这部分在上一篇文章中已讲过,这里我再把它的蓝图逻辑放上来作为参考:
选中道具
这样在背包中就出现了我们捡起的道具,这里我还加入了选中时候道具高亮的效果,这样才能让玩家知道自己当前点击的道具是哪个,下面来介绍一下该如何实现选中道具高亮的功能。
由于 Inventory 背包中的子容器是 ItemCube 它也是 Widget, 它的控件由如下图所组成:
所以只需要在按钮点击事件响应的时候,修改 Background 的背景色即可。
但是,这里有一个逻辑需要咱们处理,就是当点击另一个按钮的时候,之前选中的按钮颜色需要恢复,这就需要我们将点击的是哪个 ItemCube 告诉 Inventory。
解决方案如下:
1.创建一个蓝图接口命名 GameItems_Interface,然后定义接口函数 SetSelectedItem
2.在 UI_ItemCube Widget 里实现接口函数 SetSelectedItem
3.在 UI_Inventory Widget 里实现接口函数 SetSelectedItem
4.在 UI_ItemCube 创建按钮点击事件,并调用 SetSelectedItem 函数
5.在 UI_Inventory 中实现 SetSelectedItem 函数,并用 PreSelectedItem 变量来保存当前选择的是哪一个 UI_ItemCube,并改变各自的背景色
这样选中道具高亮的功能就完成了。
使用道具
接下里就是使用道具以及丢弃道具的功能了,先来看下使用道具该如何实现。
我们注意到背包的下方有俩个按钮,一个是使用,另一个是丢弃,既然是按钮,那就肯定是需要实现它的点击事件的。
首先来看下使用按钮的点击逻辑,其蓝图逻辑如下:
解释如下:
- 判断当前有没有选中道具,如果选中了就在道具背包数组(Inventory Data)中去遍历找到,并保存对应的对象引用,索引和道具数量
- 由于是使用道具,多以分为俩种情况,一种是道具数量大于1,还有一种就是道具数量等于1。当道具数量大于1时,则需要将Inventory Data数组中对应的道具数量减去1;当该道具数量等于1时,就需要将Inventory Data中保存的道具记录给移除掉
- 最后需要重新将Inventory Data 数组赋值给角色蓝图中的变量 Inventory Data,不然不会起到减1的作用
这样使用道具的功能就完成了,但是这只是将背包中的显示逻辑做完了,咱们还需要添加一些其他的蓝图逻辑,譬如说使用了补血的道具,则角色的血条需要增加,但是这篇文章暂时先不加这些功能,后续会慢慢完善。
丢弃道具
上面讲到了使用道具的功能,能够正确的表示背包中的显示逻辑,其实丢弃道具也是一样的,就多了一个需要在场景中生成 Actor 的逻辑,用到的蓝图函数也是 SpawnActor, 其蓝图逻辑如下:
蓝图逻辑的讲解,可以参考上文使用道具的解释。
获取工程
关注我的公号 HelloWorld杰少 回复关键字 'RPG' 获取游戏工程文件 获取完整的工程。
结尾
本篇文章主要讲解了如何用蓝图来实现对场景中的道具进行捡起与丢弃,以及选中物品的高亮显示,下篇我们来讲解下如何实现拖拽丢弃道具。
关注公众号--- HelloWorld杰少 回复关键字 'RPG' 获取游戏工程文件
请你喝杯 ☕️ 点赞 + 关注哦~
- 阅读完记得给我点个赞哦,有???? 有动力
- 关注公众号--- HelloWorld杰少,第一时间推送新姿势
最后,创作不易,如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论????~**