在 Unreal Engine 的 UMG(用户界面框架)中,虽然没有与 Unity 完全一一对应的生命周期函数(如 Start
、OnEnable
等),但 UserWidget
类(UMG 界面的基类)提供了一系列类似功能的生命周期回调函数,用于处理界面的创建、显示、隐藏、销毁等状态变化。
以下是 UMG 中常用的「生命周期相关函数」及与 Unity 的对应关系:
UMG 函数 / 事件(C++/ 蓝图) | 功能说明 | 类似 Unity 的函数 |
---|---|---|
Construct() (C++)Event Construct (蓝图) | 当 Widget 被创建并完成初始化时调用(此时所有子控件已创建)。常用于初始化数据、绑定事件、设置初始状态。 | Start() (初始化) |
OnInitialized() (C++) | 在 Construct() 之后调用,确保所有子控件的布局和属性已完全初始化。 | 接近 Awake() (更早的初始化) |
OnVisibilityChanged(ESlateVisibility NewVisibility) (C++)Event Visibility Changed (蓝图) | 当 Widget 的可见性(显示 / 隐藏)发生变化时调用。通过 NewVisibility 判断状态。 | OnEnable() /OnDisable() |
Tick(float DeltaTime) (C++)Event Tick (蓝图) | 每帧调用,用于处理界面的实时更新(如动画、数值刷新等)。需先在蓝图中开启「接收 Tick 事件」。 | Update() |
Destruct() (C++) | 当 Widget 被销毁时调用,用于清理资源(如取消事件绑定、释放内存)。 | OnDestroy() |
OnWidgetActivated() (C++) | 当 Widget 被激活(如成为焦点窗口)时调用(需手动触发或配合交互系统)。 | 类似 OnEnable() 的激活逻辑 |
OnWidgetDeactivated() (C++) | 当 Widget 失去激活状态时调用。 | 类似 OnDisable() 的失活逻辑 |
关键区别与注意点:
-
初始化顺序:
UMG 中Construct()
是最常用的初始化入口,此时 Widget 及其子控件已完成创建,适合绑定按钮事件、设置初始文本等。而OnInitialized()
会稍晚执行,确保布局计算完成(如尺寸、位置已确定)。 -
可见性与激活:
Unity 的OnEnable
/OnDisable
通常与物体的「激活状态(Active)」关联,而 UMG 中更常用「可见性(Visibility)」来控制界面显示 / 隐藏,因此OnVisibilityChanged
是替代方案。若需处理「焦点激活」,可使用OnWidgetActivated
。 -
Tick 事件:
UMG 默认不开启 Tick,若需每帧更新,需在蓝图中勾选 Widget 的「接收 Tick 事件」(或在 C++ 中通过SetIsTickableWhenPaused(true)
等函数手动开启)。
蓝图中如何使用?
在 UMG 蓝图编辑器中,这些生命周期事件可以直接通过「事件图表」调用:
- 右键搜索
Event Construct
、Event Tick
、Event Visibility Changed
等事件,拖拽到图表中即可编写逻辑。
总结来说,UMG 虽然函数命名与 Unity 不同,但通过 Construct
、OnVisibilityChanged
、Tick
、Destruct
等函数,可以实现与 Unity 生命周期相似的功能,核心是根据界面的「创建 - 显示 - 更新 - 销毁」流程选择对应的回调函数。