虚幻引擎Actor类生命周期
AActor
构造函数
- 在
AActor
类的构造函数中,虚幻引擎会初始化与该Actor
相关的一些关键属性,比如:- 默认的组件(如RootComponent、MeshComponent等)。
- 默认的属性设置,例如位置、旋转、缩放等。
- 还会调用
BeginPlay
等生命周期函数,但在构造函数中,这些函数不会执行。 - 当你在场景中创建一个
Actor
对象时,虚幻引擎会首先调用该Actor
类的构造函数。这个时机通常是在蓝图实例化、关卡加载或者你通过代码手动调用SpawnActor
时。
-
BeginPlay()
: 这是Actor
生命周期中的一个重要函数,它会在Actor被创建并初始化后被调用。与构造函数不同的是,BeginPlay
会在游戏开始时调用(或者Actor被激活时),且通常用于初始化更复杂的逻辑。BeginPlay
会在Actor所有组件的构造函数调用之后执行。- 这个时机可以用来执行一些更复杂的操作,比如与其他Actor交互、设置定时器、监听事件等。
-
Tick()
: 这个函数会在每一帧执行,它会在BeginPlay
之后被调用,用于处理每帧需要更新的逻辑(例如位置更新、动画播放等)。
SpawnActor
和Actor创建
- 通过代码动态生成Actor时:
- 当你使用
UWorld::SpawnActor
函数或SpawnActorDeferred
等方法动态生成Actor
时,构造函数会在SpawnActor
的调用过程中被执行。 - 在这种情况下,构造函数的调用顺序是:
Actor
的构造函数。- 设置
Actor
的默认属性。 - 调用
BeginPlay
(如果Actor
是激活的)。
- 当你使用
- 通过蓝图创建时:
- 蓝图中的
Actor
也会调用构造函数,但与通过代码直接创建不同,蓝图中的Actor
在编辑器中实例化时可能涉及到更多的设置(例如在编辑器中修改属性)。
- 蓝图中的
5. 构造函数 vs. BeginPlay
-
构造函数:
- 用于初始化Actor的属性和组件(例如RootComponent)。
- 构造函数中的逻辑应该尽量简单,避免涉及到游戏逻辑,特别是与其他Actor的交互。
BeginPlay
之前,Actor的其他组件还未完全初始化,因此在构造函数中不能依赖于其他Actor或游戏逻辑的状态。
-
BeginPlay()
:- 当
BeginPlay
被调用时,Actor已经完全初始化,所有的组件和属性已经设置好,可以安全地与游戏中的其他对象交互。 - 一般来说,
BeginPlay
用于进行任何需要在游戏开始后执行的初始化操作。
- 当
总结:
- 构造函数:在
Actor
实例化时调用(例如通过代码或蓝图生成)。 BeginPlay
:在游戏开始后,Actor
完全初始化后调用,适用于涉及更复杂的游戏逻辑初始化。