前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unreal Engine 4 RPG 系列教程(七):道具捡起与丢弃

Unreal Engine 4 RPG 系列教程(七):道具捡起与丢弃

作者头像
HelloWorld杰少
发布2023-08-10 09:38:30
4140
发布2023-08-10 09:38:30
举报
文章被收录于专栏:HelloWorld杰少

背包:道具捡起与丢弃

道具对象创建好以后,我们将他们布置在场景中,选中道具后拖入即可,相同的道具可以多布置几个,如图:

优化

在开始写今天的功能之前,我们先对之前的功能先进行优化,首先优化的是创建背包和打开背包的蓝图逻辑。

之前每次打开背包都会去创建一个背包 Widget 对象,现在优化为在角色蓝图函数里的 Event Begin Play 中去创建 Widget,然后打开背包的时候再去 AddToViewPort。

优化后的蓝图逻辑如图:

image

这里的蓝图逻辑需要添加 IsInventoryAdded 布尔变量,用于判读该 Widget 有没有被添加进视图。

捡起道具

当角色走近道具的时候,为了能够获取到碰撞信息,我们需要给角色添加一个 Sphere Collision 命名为 Collection Range, 并调整它的 Radius 为 100,如图:

image

image

添加 PickUp 事件,设置如下:

image

然后打开角色蓝图,开始绘制它的蓝图逻辑,逻辑如下:

image

当角色移动到地面上道具附近的时候,按下 F 键,该道具的值就记录在道具背包数组中。

蓝图逻辑讲解如下:

  1. 通过 GetOverLappingActors 来获取碰撞的 Actors,通过过滤 Class 来过滤掉不需要的碰撞 Actor,得到一个碰撞 Actor 数组
  2. 通过 For Each Loop 遍历这个碰撞的 Actor 数组元素。然后,再将获取到的元素与背包中已存在的道具(用 InventoryData 来存储)进行比较
  3. 如果比较下来 Class Reference 相等,则表示当前背包中已存在该商品,只需要将该道具的数量加 1
  4. 如果比较下来没有找到相同的,则在 InventoryData 数组中添加一个记录, 并设置它的 Class Reference 和数量
  5. 最后调用 DestoryActor 函数将碰撞到的 Actor 销毁

在将背包 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

解释如下:

  1. 判断当前有没有选中道具,如果选中了就在道具背包数组(Inventory Data)中去遍历找到,并保存对应的对象引用,索引和道具数量
  2. 由于是使用道具,多以分为俩种情况,一种是道具数量大于1,还有一种就是道具数量等于1。当道具数量大于1时,则需要将Inventory Data数组中对应的道具数量减去1;当该道具数量等于1时,就需要将Inventory Data中保存的道具记录给移除掉
  3. 最后需要重新将Inventory Data 数组赋值给角色蓝图中的变量 Inventory Data,不然不会起到减1的作用

这样使用道具的功能就完成了,但是这只是将背包中的显示逻辑做完了,咱们还需要添加一些其他的蓝图逻辑,譬如说使用了补血的道具,则角色的血条需要增加,但是这篇文章暂时先不加这些功能,后续会慢慢完善。

丢弃道具

上面讲到了使用道具的功能,能够正确的表示背包中的显示逻辑,其实丢弃道具也是一样的,就多了一个需要在场景中生成 Actor 的逻辑,用到的蓝图函数也是 SpawnActor, 其蓝图逻辑如下:

image

蓝图逻辑的讲解,可以参考上文使用道具的解释。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HelloWorld杰少 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背包:道具捡起与丢弃
    • 优化
      • 捡起道具
        • 选中道具
          • 使用道具
            • 丢弃道具
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档