UE里Actor和ActorComponent的BeginPlay和Tick(TickComponent)的执行次序

示例

假设关卡里有如下层次结构的对象关系:

|ActorA
	|ComponentA
|ActorB
	|ComponentB

执行结果

ComponentA构造
ActorA构造
ComponentB构造
ActorB构造
//总结:这一阶段构造关卡里的所有的Actor。(构造时会[依赖性]的先构造内部的Component)

ComponentA::BeginPlay
ActorA::BeginPlay
ComponentB::BeginPlay
ActorB::BeginPlay
//总结:这一阶段关卡里的所有Actor依次调用BeginPlay。(Actor::BeginPlay调用到Super::BeginPlay()时,会调用自己内部注册的Component的BeginPlay)

ActorA::Tick
ActorB::Tick
ComponentA::TickComponent
ComponentB::TickComponent
//总结:这一阶段调用Tick。
//Actor和Component的Tick都是FActorTickFunction和FComponentTickFunction的对象执行的方法。他们都是FTickFunction类的子类。
//Actor和Component的Tick都是分开注册和分开调用的,他们会在BeginPlay后的Tick阶段调用,但互相没有关系。

执行规则(关卡内序列化的Actor)

规则就是分阶段执行单个阶段内,不同Actor之间、不同Component之间的执行次序不应做假设,但是前2个阶段里,Actor构造和BeginPlay的时候,会依赖性的调用内部的Component的构造和BeginPlay

step1: 所有Actor::构造。
step2: 所有Actor::BeginPlay。
step3: Tick阶段,Actor和Component分开Tick,互无关系。

posted @ 2022-12-23 22:54  GameSprite  阅读(420)  评论(0编辑  收藏  举报