道具对象创建好以后,我们将他们布置在场景中,选中道具后拖入即可,相同的道具可以多布置几个,如图:
在开始写今天的功能之前,我们先对之前的功能先进行优化,首先优化的是创建背包和打开背包的蓝图逻辑。
之前每次打开背包都会去创建一个背包 Widget 对象,现在优化为在角色蓝图函数里的 Event Begin Play 中去创建 Widget,然后打开背包的时候再去 AddToViewPort。
优化后的蓝图逻辑如图:
image
这里的蓝图逻辑需要添加 IsInventoryAdded 布尔变量,用于判读该 Widget 有没有被添加进视图。
当角色走近道具的时候,为了能够获取到碰撞信息,我们需要给角色添加一个 Sphere Collision 命名为 Collection Range, 并调整它的 Radius 为 100,如图:
image
image
添加 PickUp 事件,设置如下:
image
然后打开角色蓝图,开始绘制它的蓝图逻辑,逻辑如下:
image
当角色移动到地面上道具附近的时候,按下 F 键,该道具的值就记录在道具背包数组中。
蓝图逻辑讲解如下:
在将背包 AddToViewPort 的时候,根据背包数组中记录的值去构建背包的视图,这部分在上一篇文章中已讲过,这里我再把它的蓝图逻辑放上来作为参考:
image
这样在背包中就出现了我们捡起的道具,这里我还加入了选中时候道具高亮的效果,这样才能让玩家知道自己当前点击的道具是哪个,下面来介绍一下该如何实现选中道具高亮的功能。
由于 Inventory 背包中的子容器是 ItemCube 它也是 Widget, 它的控件由如下图所组成:
image
所以只需要在按钮点击事件响应的时候,修改 Background 的背景色即可。
但是,这里有一个逻辑需要咱们处理,就是当点击另一个按钮的时候,之前选中的按钮颜色需要恢复,这就需要我们将点击的是哪个 ItemCube 告诉 Inventory。
解决方案如下:
1.创建一个蓝图接口命名 GameItems_Interface,然后定义接口函数 SetSelectedItem
image
image
2.在 UI_ItemCube Widget 里实现接口函数 SetSelectedItem
image
3.在 UI_Inventory Widget 里实现接口函数 SetSelectedItem
image
4.在 UI_ItemCube 创建按钮点击事件,并调用 SetSelectedItem 函数
image
image
5.在 UI_Inventory 中实现 SetSelectedItem 函数,并用 PreSelectedItem 变量来保存当前选择的是哪一个 UI_ItemCube,并改变各自的背景色
image
这样选中道具高亮的功能就完成了。
接下里就是使用道具以及丢弃道具的功能了,先来看下使用道具该如何实现。
我们注意到背包的下方有俩个按钮,一个是使用,另一个是丢弃,既然是按钮,那就肯定是需要实现它的点击事件的。
image
首先来看下使用按钮的点击逻辑,其蓝图逻辑如下:
image
解释如下:
这样使用道具的功能就完成了,但是这只是将背包中的显示逻辑做完了,咱们还需要添加一些其他的蓝图逻辑,譬如说使用了补血的道具,则角色的血条需要增加,但是这篇文章暂时先不加这些功能,后续会慢慢完善。
上面讲到了使用道具的功能,能够正确的表示背包中的显示逻辑,其实丢弃道具也是一样的,就多了一个需要在场景中生成 Actor 的逻辑,用到的蓝图函数也是 SpawnActor, 其蓝图逻辑如下:
image
蓝图逻辑的讲解,可以参考上文使用道具的解释。
本文分享自 HelloWorld杰少 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!