UE引擎LGUI插件 —— LGUILifeCycleBehaviour & LGUILifeCycleUIBehaviour

本篇使用UE4.26+LGUI 3.0

给大家介绍一下LGUILifeCycleBehaviour,顾名思义就是封装了一些LGUI生命周期的方法,用来配合LGUI的预制体工作流程会很方便(为什么这么说呢?后面会解释到)。

LGUI生命周期函数

1、在UE引擎里创建蓝图,父类选择LGUILifeCycleBehaviour:
UE引擎LGUI插件 —— LGUILifeCycleBehaviour & LGUILifeCycleUIBehaviour_第1张图片
2、创建完成之后打开这个蓝图,可以看到默认的BeginPlay和Tick被替换成了Awake、Start、Update,另外还可以在Functions/Override里面看到有OnEnable、OnDisable、OnDestroy:
UE引擎LGUI插件 —— LGUILifeCycleBehaviour & LGUILifeCycleUIBehaviour_第2张图片
3、这几个方法与Unity中的方法命名一样,实际的作用也一样。
Awake和Start用于替代UE的BeginPlay,Update用于替代Tick,OnDestroy用于替代EndPlay。

执行顺序:Awake -> OnEnable -> Start -> Update -> OnDisable -> OnDestroy

Awake : 对于非UI物体,LGUILifeCycleBehaviour在加载到场景中并且所在的Actor的RootComponent是可见的情况下执行一次;对于UI物体,LGUILifeCycleBehaviour在加载到场景中并且 UIItem 的 IsUIActive 是 true 的情况下执行一次。
OnEnable : LGUILifeCycleBehaviour的 GetIsActiveAndEnable 由 false 变为 true 的时候执行。如果一开始加载到场景里的时候 GetIsActiveAndEnable 就是 true 那么也会执行。
Start : 在第一个 Update 执行之前执行 Start。
Update : 当 GetIsActiveAndEnable 是 true 的时候每一帧执行一次;另外可以通过 SetCanExecuteUpdate 来开关 Update 的执行。
OnDisable : LGUILifeCycleBehaviour的 GetIsActiveAndEnable 由 true 变为 false 的时候执行,或在 OnDestroy 之前并且 OnEnable 执行过的情况下执行一次。
OnDestroy : LGUILifeCycleBehaviour被销毁(EndPlay)的时候并且 Awake 执行过的情况下执行一次。

方法说明
GetIsActiveAndEnable : 对于非UI物体,RootComponent 是可见并且 LGUILifeCycleBehaviour 的 enable 是 true 的情况下才返回 true;对于UI物体,UIItem 的 IsUIActive 是 true 并且 LGUILifeCycleUIBehaviour 的 enable 是 true 的情况下才返回 true。
SetCanExecuteUpdate : 调用之后并不会立即影响Update的执行,只有在Start/ OnEnable/ OnDisable之后才会影响。

Awake/ Start/ OnDestroy 在全生命周期中最多执行一次,OnEnable/ OnDisalbe/ Update 可能执行多次。

Awake和Start的关系
都可用于初始化,Awake是加载到场景后立即执行,Start是在Update之前执行,Awake和Start可能不是在同一帧执行,但是Start和Update肯定是在同一帧执行。当加载一个预制体的时候,其上所有LGUILifeCycleBehaviour都执行完毕之后才会执行所有的Start,所有Start执行完毕之后才会执行Update。

注意事项
同一个Actor上的多个LGUILifeCycleBehaviour的执行先后顺序是不一定的。
与 UE 生命周期函数的顺序关系:BeginPlay -> Awake … OnDestroy -> EndPlay , Tick 函数与 Update 函数无关。

4、之前说过 LGUILifeCycleBehaviour 跟LGUI的预制体一起用比较好,原因如下:
BeginPlay会在LGUI预制体的反序列化的过程中就执行,但是这时反序列化的工作还没有完成,很多属性都还没有完全还原,那么这个时候在BeginPlay里面执行的初始化工作获取到的数据是错误的;Awake就没有这个问题,Awake会等到当前的预制体的反序列化工作都完成之后再执行,保证所有获取到的属性都是正确的。

另外提一下,在LGUI2.x的版本里有LGUIBehaviour,现在LGUI3的版本里把这个类拆分成了LGUILifeCycleBehaviourLGUILifeCycleUIBehaviour:LGUILifeCycleBehaviour用于不是UI的物体上;LGUILifeCycleUIBehaviour继承自LGUILifeCycleBehaviour,用于UI物体上,并且包含了额外的UI的回调函数。

你可能感兴趣的:(LGUI,UE4,3D,UI,ue4,游戏引擎)