在UE5中制作可拖动的控件

在这篇文章中,我们将探讨如何在 UE 中制作可拖动的控件。部分内容源自虚幻引擎中的文档,因此如果有任何不清楚的地方,可以从文档中查找。

制作可移动标题栏

这里的关键是要创建一个代表窗口顶部的控件,拖动该控件相当于移动整个窗口。

标题 文本绑定到变量Title

创建另一个用户控件类的变量"ParentWidget",并使其实例可编辑并在生成时公开。

我们可以通过使父窗口控件不可见来实现"关闭"按钮功能。

OnMouseButtonDown事件

现在我们已经创建了基本的控件,接下里要覆盖"OnMouseButtonDown"的功能。

将鼠标悬停在左侧的FUNCTIONS 选项卡上,可以看到弹出"Override"选项。单击该按钮并找到"OnMouseButtonDown"功能。

这样我们我们就获得了鼠标事件,它给了我们绝对坐标。不同之处在于,我们不要使用该部件的Geometry ,而是使用父控件Geometry 。因为我们要移动的是父窗口控件。

我们将此 Vector2D 存储为变量**"Drag Offset"** ,然后就可以开始检测拖动了。

检测拖动

当检测到拖动时,我们想要创建一个用于拖动效果 的部件。

这其实是可选的,我们可以根据要求对其进行自定义。本质上,它是一个小部件,当我们用鼠标拖动时,会看到它跟着四处移动。

我们还需要考虑与此相关的 3 件事:

  • 拖动小部件
  • 拖放操作
  • 放开功能

拖动小部件

拖动小部件 将用于直观地表示我们的窗口,可以根据要求进行设计。

这里我们只有一个带有颜色的 Sizebox 和 Border 组件。

我们需要向此小部件添加**Widget Reference**变量,并使其实例可编辑并在生成时公开

对于事件图,我们在Event Construct 上进行实现。

我们主要做的事情是:

  • 将父窗口控件设置为隐藏(因为这个窗口小部件是可见的)
  • 使用父窗口控件的尺寸更新窗口小部件size box的尺寸

因此,当我们创建拖动小部件时,它会使父窗口控件不可见,并且其大小也适合父窗口控件。

拖放操作

这是一种UE蓝图。我们创建新的蓝图时,搜索"drag drop"可以找到它。

我们创建一个将其命名为"WidgetDrag"。

在**"On Drag Detected"事件上我们通过在 "Create Drag Drop Operation"上选择它来创建此部件,然后在类下选择它 。**

我们在这里唯一需要添加的是两个变量:**WidgetReference**** 和 **DragOffset** 。**

确保它们都是实例可编辑的并且在生成时公开。

Drop功能

最后一部分实际上是检测drop后的部件并更新效果。这是通过我们的另一个带有画布的部件完成的。

该部件主要包含画布面板 和我们将移动的部件。

我们需要确保将可见性设置为visible ,并且如果不是默认设置,则设置为可变。

目前,我没有注册自定义输入,因此我使用以下方法手动更新部件的可见性:

现在我们想要执行 On Drop 行为,这是我们使用WidgetDrag 的地方。这部分主要是获取存储的小件引用拖动偏移量

主要流程:

  • 开始拖动窗口
  • 记下鼠标相对于部件(而不是屏幕)的位置
  • 将窗口拖放到新位置
  • 记下当前位置
  • 在新的鼠标位置重新添加部件,通过初始拖动进行调整

将窗口链接到您的父窗口控件

最后,我们需要将可移动标题栏 控件链接到父控件上。

例如,下面是创建的人物装备控件:

事件构造 中,将**Movable Title Bar****Parent Widget**设置为 self,这意味着每当玩家移动标题栏时,它就会移动该控件

相关推荐
心怀梦想的咸鱼6 小时前
UE5 第一人称射击项目学习(四)
学习·ue5
UTwelve13 小时前
【UE5】使用基元数据对材质传参,从而避免新建材质实例
ue5·材质
UTwelve13 小时前
【UE5】在材质中计算模型在屏幕上的比例
ue5·材质
心怀梦想的咸鱼1 天前
UE5 第一人称射击项目学习(二)
学习·ue5
暮志未晚Webgl1 天前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
心怀梦想的咸鱼1 天前
UE5 第一人称射击项目学习(完结)
学习·ue5
暮志未晚Webgl3 天前
110. UE5 GAS RPG 实现玩家角色数据存档
java·前端·ue5
Zhichao_974 天前
【UE5】Slider控件样式
ue5
流行易逝4 天前
23.UE5删除存档
ue5
心怀梦想的咸鱼4 天前
UE5 第一人称射击项目学习(三)
学习·ue5