生命周期流程图
Actor生命周期如上图所示,主要包括以下:
在关卡中实例化或生成Actor,包括如何初始化Actor。
将Actor标识为PendingKill,然后通过垃圾回收移除或销毁。
其实,从上图可以看出不管Actor是如何创建的,最终销毁路径都相同。
Actor生成方式
关于Actor的生成方式,有三种:
1.从磁盘加载
2.在编辑器中运行
3.生成/延迟生成
Actor生命周期终点
这个有多种方式销毁Actor,但是从世界中删除它们的方式是一样的。事实上,大部分Actor在运行中不会实际销毁,可以看垃圾回收。
需要删除某个Actor时,手动调用AActor::Destroy,这时候GamePlay仍在继续。Actor被标记为等待销毁并从关卡的Actor数组中移除。
垃圾回收
一个对象被标记待销毁的一段时间后,垃圾回收会将其从内存中移除,释放其使用的资源。
在销毁过程中,调用以下函数:
- UObject::BeginDestroy
- UObject::IsReadyForFinishDestroy
- UObject::FinishDestroy
高级垃圾回收
创建子对象。将对象与其子对象组合到垃圾回收器的单个群集后,引擎可延迟释放群集使用的资源,直到整个对象可被释放时一次性释放全部资源。
多数项目中无需对垃圾回收进行配置或修改,但存在一些特定情况 - 可以如下方式对垃圾回收器的"集群"行为进行调整,以提高效率:
群集处理(Clustering) - 关闭集群。在 项目设置(Project Settings) 中的 垃圾回收(Garbage Collection) 部分下,可将 创建垃圾回收器UObject群集(Create Garbage Collector UObject Clusters) 选项设为 false。对多数项目而言,此操作将导致垃圾回收效率降低,因此只建议在性能测试证明其绝对有益的情况下使用。
小结
其实,生命周期主要包括了生成(SpawnActor),初始化数据,生命周期结束(Destroy),垃圾回收/高级垃圾回收。从这几个过程可以总结出来大部分的物体的生命周期也都是这个过程。学习到了Actor的,其他地方遇到这种类型的方式,直接套用就好了。就像android的生命周期,或者unity的生命周期,也可以用这种方式来表示下。大概逻辑是一样的,细节有些不同。