UE Actor生命周期

简介: UE Actor生命周期

生命周期流程图

Actor生命周期如上图所示,主要包括以下:

在关卡中实例化或生成Actor,包括如何初始化Actor。

将Actor标识为PendingKill,然后通过垃圾回收移除或销毁。

其实,从上图可以看出不管Actor是如何创建的,最终销毁路径都相同。

Actor生成方式

关于Actor的生成方式,有三种:

1.从磁盘加载

2.在编辑器中运行

3.生成/延迟生成

Actor生命周期终点

这个有多种方式销毁Actor,但是从世界中删除它们的方式是一样的。事实上,大部分Actor在运行中不会实际销毁,可以看垃圾回收。

需要删除某个Actor时,手动调用AActor::Destroy,这时候GamePlay仍在继续。Actor被标记为等待销毁并从关卡的Actor数组中移除。

垃圾回收

一个对象被标记待销毁的一段时间后,垃圾回收会将其从内存中移除,释放其使用的资源。

在销毁过程中,调用以下函数:

  1. UObject::BeginDestroy
  2. UObject::IsReadyForFinishDestroy
  3. UObject::FinishDestroy

高级垃圾回收

创建子对象。将对象与其子对象组合到垃圾回收器的单个群集后,引擎可延迟释放群集使用的资源,直到整个对象可被释放时一次性释放全部资源。

多数项目中无需对垃圾回收进行配置或修改,但存在一些特定情况 - 可以如下方式对垃圾回收器的"集群"行为进行调整,以提高效率:

群集处理(Clustering) - 关闭集群。在 项目设置(Project Settings) 中的 垃圾回收(Garbage Collection) 部分下,可将 创建垃圾回收器UObject群集(Create Garbage Collector UObject Clusters) 选项设为 false。对多数项目而言,此操作将导致垃圾回收效率降低,因此只建议在性能测试证明其绝对有益的情况下使用。

小结

其实,生命周期主要包括了生成(SpawnActor),初始化数据,生命周期结束(Destroy),垃圾回收/高级垃圾回收。从这几个过程可以总结出来大部分的物体的生命周期也都是这个过程。学习到了Actor的,其他地方遇到这种类型的方式,直接套用就好了。就像android的生命周期,或者unity的生命周期,也可以用这种方式来表示下。大概逻辑是一样的,细节有些不同。

相关文章
|
11月前
UE Actor BeginPlay 之前设置参数
UE Actor BeginPlay 之前设置参数
83 0
|
10月前
|
JavaScript
state 和 props 触发更新的生命周期分别有什么区别?
state 和 props 触发更新的生命周期分别有什么区别?
|
9月前
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
53 0
|
10月前
|
C++
UE C++延迟调用实现(LatentAction方法)
UE C++延迟调用实现(LatentAction方法)
187 0
|
10月前
|
JavaScript 前端开发 算法
【Recat组件,生命周期,路由,性能,setState】
【Recat组件,生命周期,路由,性能,setState】
62 0
|
10月前
tp的生命周期
tp的生命周期
|
消息中间件 前端开发 Java
Actor 模型工作机制和消息机制 | 学习笔记
快速学习 Actor 模型工作机制和消息机制
438 0
Actor 模型工作机制和消息机制 | 学习笔记
|
JavaScript 调度 开发者
生命周期函数-组件运行和销毁阶段的钩子函数|学习笔记
快速学习生命周期函数-组件运行和销毁阶段的钩子函数
189 0
生命周期函数-组件运行和销毁阶段的钩子函数|学习笔记
生命周期setState流程
生命周期setState流程
69 0
|
缓存 前端开发 Java
一年时间过去了,LiveData真的被Flow代替了吗? LiveData会被废弃吗?
在去年的这个时候,谷歌官方推荐使用 Flow 替代LiveData,一年时间过去了,我相信还是有很多android开发的朋友和我一样有以下几个问题:Android开发人员需要从 LiveData