LGUI毕竟参考自unity的NGUI/UGUI,自然也会实现一些类似的生命周期函数

LGUI Life Cycle Behaviour

由于 LGUI 使用像 Unity 一样的工作流程,因此建议在大多数情况下使用 LGUILifeCycleBehaviour 作为基本 ActorComponent 类,尤其是在 LGUIPrefab 中。

创建蓝图时,输入“LGUILifeCycle”,然后显示两个类,一个是 LGUILifeCycleBehaviour,另一个是 LGUILifeCycleUIBehaviour:

通常只使用LGUILifeCycleBehaviour 类,它可以适应大多数用例。LGUILifeCycleUIBehaviour 包含一些仅用于 UI 元素的函数/事件。

生命周期行为

LGUILifeCycleBehaviour 的生命周期函数由 LGUIManagerActor 统一管理,执行顺序如下:

Awake -> OnEnable -> Start -> Update -> OnDisable -> OnDestroy

  • Awake:LGUILifeCycleBehaviour 在加载到场景中时执行一次,并且 UIItem 的 IsUIActive 为 true。如果 LGUILifeCycleBehaviour 是从预制件创建的,则需要将初始化工作放在 Awake(而不是 BeginPlay)中 ,因为 Awake 将在所有预制件反序列化工作完成后执行。

  • OnEnable:当 LGUILifeCycleBehaviour 的 GetIsActiveAndEnable 从 false 更改为 true 时执行。

  • Start:在执行第一个 Update 之前执行 Start。

  • Update:当 GetIsActiveAndEnable 为 true 时,每帧将执行一次。

  • OnDisable:当 LGUILifeCycleBehaviour 的 GetIsActiveAndEnable 从 true 变为 false 时执行

  • OnDestroy:当 LGUILifeCycleBehaviour 被销毁 (EndPlay) 并且 Awake 被执行时执行一次。

Awake/Start/OnDestroy 在整个生命周期中只能执行一次,OnEnable/OnDisalbe/Update 可以执行多次。

GetIsActiveAndEnable:当RootComponent可见且该组件已启用时返回true,请注意! !如果RootComponent是UIItem:当UIItem是“activehierarchy”并且这个组件是启用的时候返回true。

使用虚幻引擎的内置生命周期函数执行顺序:BeginPlay -> Awake ...OnDestroy -> EndPlay,则 Tick 函数与 Update 函数无关。

预制件中的唤醒执行顺序:层级较高的脚本将更早执行,因此根 Actor 上的脚本将执行第一个,最低 Actor 上的脚本将执行最后一个。

GetRootSceneComponent() 获取的是组件所属 Actor 的 RootComponent;是一个GetOwner->GetRootComponent 快捷方法

LGUI LifeCycle UI Behaviour

基本的和LGUI Life Cycle Behaviour一样,ULGUILifeCycleUIBehaviour 是专门为 UI 设计的生命周期行为组件,必须附加到 RootComponent 为 UUIItem 的 Actor 上。它在继承基类功能的基础上,额外提供了 UI 特定的回调函数。

  • OnUIActiveInHierarchy:当 RootUIComp IsActiveInHierarchy 状态更改时调用。

  • OnUIDimensionsChanged:更改 RootUIComp->AnchorData 时调用( UI 尺寸改变时调用)。

  • OnUIChildDimensionsChanged:当 RootUIComp 的 attachchildren->AnchorData 发生更改时调用(子 UI 尺寸改变时调用)。

  • OnUIChildAcitveInHierarchy:当 RootUIComp 的附加子 IsActiveInHierarchy 状态发生更改时调用(子 UI 激活状态改变时调用)。

  • OnUIAttachmentChanged:当 RootUIComp 附加到新的父级时调用( UI 附加关系改变时调用)。

  • OnUIChildAttachmentChanged:当 RootUIComp 的附加子项附加到 RootUIComp 或与 RootUIComp 分离时调用(子 UI 附加关系改变时调用)。

  • OnUIInteractionStateChanged:当 RootUIComp 的交互状态发生变化时调用(当 UICanvasGroup 组件允许或不允许交互时)。

  • OnUIChildHierarchyIndexChanged:调用 RootUIComp 的 attachchildren->SetHierarchyIndex() 时调用,通常用于布局对子项进行排序。

LGUIPrefabInterface

此接口为在 LGUIPrefab 中管理的 Actor 和 ActorComponent 提供 Awake 函数。

打开蓝图 Actor 或 ActorComponent,点击“类设置”,在“已实现的接口”区域中点击“添加”按钮,输入 LGUIPrefabInterface

然后“接口”区域会出现两个功能:

  • 唤醒 :当 LGUIPrefab 完成加载时调用。这称为晚于 BeginPlay。

  • EditorAwake:与 Awake 函数相同,但仅在编辑模式下执行。

注意!!! 预制件中的唤醒执行顺序:层级较高的脚本将更早执行,因此根 Actor 上的脚本将执行第一个,最低 Actor 上的脚本将执行最后一个。Actor 先执行,然后在组件上执行。当在同一预制件中时,此 Awake 的执行时间晚于所有 LGUILifeCycleBehaviour 的 Awake。