高阶背包Item控件架构

前言 如果你恰巧在做背包系统,而且碰巧又在做背包中的Item组件拖拽功能,那你必须得看这篇文章。

首先我们来确定一个问题 —— Item组件内并不总是存在数据,有的时候我们需要不同的方法来实现所需的效果,那么我们有没有什么方法能够一键托管背包样式呢?

这里我们利用简单的代码解决一个需求:

已知:Item本身是存在自己的图标数据的

实现:

1.Item组件有数据的时候边框为绿色,没数据的时候边框为红色

2.Item组件有数据的时候图标为正常,没有数据的时候图标为灰色

3.Item组件有数据的时候能够进行拖拽,没有数据的时候不能进行拖拽

知道需求了 那么我们开始吧

首先先简单来一个边框材质 命名为M_Border

然后再随便找一个Icon贴图像这样

接下来创建三个UMG控件 分别为 W_Main W_Item W_Item_Icon

新建一个空白关卡 在空白关卡内将W_Main 控件添加到视口 并解锁鼠标可视

接下来的步骤可以根据自身项目的不同 适当修改

W_Item_Icon 中操作步骤:

控件中添加Image 并将Icon贴图实例化

声明一个变量命名为IsEnabled(这个操作应该是具体的实现方法,为了实现检测Item中是否存在数据,由于是简单实现功能,我把它改成了一个变量并勾选可编辑实例,以便能够快速的看到结果)将这个变量在预加载时赋值给控件函数SetIsEnabled

到此为止 Item Icon 编写完毕。

W_Item 中的操作步骤:

在控件中添加Border 并将之前声明的 边界材质实例到Border中,颜色为纯白

由于在W_Item_Icon中声明了一个可编辑变量,那我们同样的方式在W_Item中声明一个可编辑变量(这里同Item Icon 一样也应该是一个具体方法,对此我不过多表述),在构造控件时创建W_Item_Icon 控件,存储实例化后的指针并将控件添加到Border中

由于是尽快能看到结果,我这里就将边界颜色在构造控件时一并实现

接下来就是无聊的控件拖拽代码

先搞定 触发拖动按键绑定事件

再搞定 创建拖拽操作

这里重点来了 重点来了 重点来了 重要的事情要讲三遍

如果存在数据(数据非0)时 那W_Item_Icon中的 IsEnabled 必然是true,所以只有W_Item_Icon能够交互时,才能进行拖拽操作,那么 代码来了

至此,W_Item中代码编写完毕

W_Main中操作:

搞一个画布,拖两个W_Item 进去 勾选SizeToContent

其中一个IsEnabled 勾选,另一个不勾选

最后让我们来开始游戏 看效果

拖动红色不存在数据的Item控件
拖动绿色存在数据的Item控件

这种方法能够适用很多不同Item样式

主要也是可以通过利用函数方法托管Item控件展示不同的样式

你还能利用我这个方法做出来什么稀奇古怪的Item控件,或者有更好的方法,回头可以分(白)享(嫖)送我

虚幻版本 V5.0.3

添加评论

您的邮箱地址不会被公开。 必填项已用 * 标注