一、创建血量属性
Unreal Motion Graphics (UMG)
是 UE中用于创建用户界面 (UI
) 的工具。它可以实现如下复杂功能:
(1)动画:UMG 支持为控件添加动画。可以在Widget Blueprint
中创建动画,并在蓝图脚本中控制动画的播放。
(2)绑定数据:可以将控件的属性绑定到变量或函数,实现动态更新 UI。比如本节中,将进度条的值绑定到角色的健康值。
(3)事件处理:UMG 提供了丰富的事件处理功能。可以为按钮点击、鼠标悬停等事件添加处理函数,实现交互逻辑。
(4)自定义控件:可以创建自定义的Widge
类,封装复杂的 UI 逻辑,并在其他地方复用。UMG
和HUD
,在UE4中的HUD
主要是指
(1)UE3那里继承来的Head-Up Display
功能,在UE4中主要是用来Debug
(2)向画布上添加图形图元的功能,表示文字的功能,还有简单的HitBox
处理,用来检测鼠标等
但是由于这些功能UMG都可以干,所以UE4的HUD功能也不是需要一定要掌握了UMG
是对Slate
进行了扩展方便在游戏中使用的框架,Slate
是不依靠某个平台的UI
框架,UE4的Editor
和游戏中的UI
都是使用Slate
构建的。
(1)继承了UObject
使得Blueprint
也可以方便使用
(2)方便在UE4的Editor
上确认渲染结果
(3)简单的制作UI动画- Widget 层次结构:
- UMG 的
Widget
是Blueprint
和Slate
控件的结合。每个UMG Widget
都有一个对应的Slate Widget
。UMG 通过将高层次的蓝图控件映射到Slate
控件来实现 UI。 UUserWidget
:UMG 中所有Widget
的基类。SUserWidget
:与UUserWidget
对应的Slate
控件。
- 事件驱动系统:
- UMG 和 Slate 使用事件驱动系统来处理用户输入事件。常见的事件包括:
①点击事件:如按钮的点击事件。
②悬停事件:鼠标悬停在控件上时触发的事件。
③键盘事件:处理键盘输入的事件。 - 事件的处理依赖于
Delegate
和Binding
系统。UMG 中的事件通常是通过Blueprint
或C++
中的Delegate
绑定来处理的。
- 数据绑定和属性系统:
- UMG 支持将控件的属性绑定到数据源。数据绑定使得 UI 能够自动更新,以反映数据的变化。常见的数据绑定机制包括:
①Property Binding
:通过 UMG 的绑定功能,将控件属性绑定到类的属性或函数。
②Delegate Binding
:通过 Delegate 绑定,处理属性变化时的自定义逻辑。
UMG
的三种控件:
UWidget
: 所有 UMG 控件的公共基类,不提供增加子节点功能UPanelWidget
: 提供了增加子节点功能,可以有多个子节点UContentWidget
: 继承于UPanelWidget
,是UPanelWidget
的一种特例,只能有一个子节点
(1)不能有子节点的控件:这个类别的控件的公共基类都是UWidget
,每个 UMG 控件,都持有一个 Slate
控件的智能指针。
(2)可以增加子节点的控件:
- 有一个子节点的控件继承的父类依次是
UComponentWidget
->UPanelWidget
,父类UComponentWidget
构造函数中设置了不允许多个孩子标记位:(源码如下)
UContentWidget::UContentWidget(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
bCanHaveMultipleChildren = false;
}
- 公共基类
UPanelWidget
定义了AddChild
函数,可以增加对应的子节点:(源码如下)
UPanelSlot* UPanelWidget::AddChild(UWidget* Content)
{
if ( Content == nullptr )
{
return nullptr; //表示无法添加空控件
}
//检查是否可以有多个子控件
if (