UMG————拖拽

**

UMG 中拖拽的功能

**

**背景:**UMG 中要实现拖拽。我想做一个拖拽图标放在新的位置的功能。

重要的蓝图节点记录:

1,OnDrop: 检测鼠标按键松开的事件

这是一个鼠标按住之后松开的事件。可以理解为 松开鼠标的时候, 鼠标对应的位置 的事件。
这是一个非常有意思的蓝图节点。一定也好注意,在你松开鼠标的时候,你的鼠标 下面对应的是哪个是slot ,就在哪个slot 中调用这个函数。 比如 你从2号位 拖动图标到三号位。 你在2号位置 执行了 on mouse down 和 On Drag Detected。 但是当你在3号位置松开的时候, 就在3号位置对应的 slot 执行了 on drop 函数。

2,On mouse Button Down 检测鼠标按下的事件

这个事件 针对拖拽 可以搭配 另外一个节点一起使用。
在这里插入图片描述
搭配的节点: Detect Drag if pressed 。 可以理解为一个绑定的事件。如果在鼠标按下的时候 ,发生了拖拽,就会触发 On Drag Detect 事件。

3, On Drag Detected : 检测拖拽功能

这个蓝图节点也是经常搭配一个 节点: 创建 Drag Drop Operation
在这里插入图片描述
在这里插入图片描述
Drag Drop Operation : 可以理解为一个 拖拽的对象。我们可以从这个对象中获取一些信息。上图直接把这个拖拽的信息赋值给了 Operation , 这样就可以在 Operation 里面获取拖拽的信息了。
PayLoad: 可以理解为负载,或者要传递的数值。此处用的是 self 。意思就是当前点击开始或者拖拽的时候 对用的 slot 的所有的变量信息。
default Drag Visual : 默认进行拖拽时,显示的画面。就是拖拽时鼠标的显示图片。 比如你从一个正方体区域拖拽,鼠标上显示的是一个 小猫的头。

4, 废话少说 show me the code。 从一个框内的图标拖到另外一个框内的效果实现

(1) 重建Inventory 库存的UMG WBP_Inventory

在这里插入图片描述
设置两个 Horizontal , 然后 填充了 6个 slot

在这里插入图片描述
为了 对这些 slot 进行区别, 我们 对每一个slot 里面的 Slot Index 的初始默认值进行设置。
上面一排 0-5
下面一排 6-11

(2)对框 进行初始赋值

上面的一排框, 初始状态应该按照我们设定的顺利,排上特定的图案。

在UMG 的 初始化过程中
在这里插入图片描述
在这里插入图片描述

将 Inventory 里面存储的 Item 按照顺利 ,对 UMG slot 中的 item 进行赋值。

Inventory 这个数组,我们放置在GameMode 中,
GameMode:
在这里插入图片描述
箭头部分的序号有特定的作用。除了排序之外,我们在原来的 BPItem 中 设定了 Texture 数组的选择列表。 其中有空白贴图的情况。所以 可以通过Index 可以控制 Inventory 中的 item 有的有贴图,有的没有贴图。

BP_item
在这里插入图片描述

我想做的事情
在这里插入图片描述

(1)0-5 里面的图标可以直接拖动到 6-11 里面。 0-5 之间的图标互相拖动,是无法实现位置互换的: 3和4 是无法位置互换的。

(2)上面的一排可以任意拖动到 6-11 的 槽点里面
(3)6-11 之间 任意两个有图标的是可以互相拖拽互换的。
(4)对于6-11 之间 。只能将图标拖动到空白的槽点或者 两个图标互换位置
(5)对6-11 上的任意一个槽点。双击 可以让 该槽点 变成空白的

剩下关键的逻辑 都在 inventory-Slot——UMG 中进行逻辑构建:

On Drop 函数 重载: 实现 所有的位置互换。
关键点:

(1)每一个slot 都有一个变量 Slot Index , 这个是每一个slot 的身份ID 。 剩下的就是针对这个ID 的逻辑操作。

双击事件:

有一个事件 On mouse Button Double Click :

在双击的时候,如果对应的 slot 里面的 item 的贴图不为空。 不要直接将贴图设置为空。 需要自己提前定义一个 Item_Blank 。用这个 Item_Blank 去替换当前的 Item 。 否则会出现神奇的事情。 点击一个有贴图的图标, 上面和下面居然同时消失,原因还未破解出来。

留给我们的事件不多了,就写到这里ba . TMD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值