UE4创建背包拖拽功能(学习笔记)

第一步:创建DragDropOperation的子类

创建DragDropOperation的子类WigdetDrag,声明两个public变量,Widget(类型为UserWidget),MouseOffset(Vector2D),并勾选上Expose On Spawn。
Widget变量设置
MouseOffset变量设置

第二步:在背包蓝图中,重写鼠标点击方法

打开背包蓝图,将鼠标放在左侧Functions上,点击Override按钮,选择On Mouse Button Down。按照下图连接
鼠标点击绑定拖拽事件

第三步:重写OnDragDetected方法

再次将鼠标放在Functions上,点击Override按钮,选择 On Drag Detected,连接如下
重写OnDragDetected方法
创建拖拽事件,然后将背包界面赋予到WidgetDrag蓝图中的Wigdet变量上,将鼠标位置转换为屏幕坐标,赋予MouseOffset上,然后移除拖拽后原来位置的背包界面。
到这里,就实现了背包的拖拽,并且可以删除之前的背包界面,但是此时拖拽背包后,背包会消失,是因为没有创建鼠标松开后的背包界面。因为当前的背包已经删除了,所以在背包蓝图中无法创建,只能去主UI上去创建。

第四步:创建松开鼠标后的背包界面

打开主UI界面,重写OnDrop方法,连接如下:
重写OnDrop方法
确保主UI的鼠标碰撞是打开状态,因为这里需要接受到松开鼠标时的鼠标位置,转换成屏幕坐标,然后减去开始拖拽时的坐标(MouseOffset),最后得到的就是当前背包界面所在的位置(这里没明白为啥,教程中老师没解释,就这么做了,想了很久也没想明白,有没有大佬能说一下)。
主UI的碰撞设置

猜你喜欢

转载自blog.csdn.net/bjygn/article/details/108336718