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,互无关系。