Actor 生命周期

news2024/12/29 11:45:05

一,一览图

二, 大致流程

三,细节

从磁盘加载

已位于关卡中的 Actor 使用此路径,如 LoadMap 发生时、或 AddToWorld(从流关卡或子关卡)被调用时。

  1. 包/关卡中的 Actor 从磁盘中进行加载。

  2. PostLoad - 在序列化 Actor 从磁盘加载完成后被调用。在此处可执行自定义版本化和修复操作。PostLoad 与 PostActorCreated 互斥。

  3. InitializeActorsForPlay

  4. 为未初始化的 Actor 执行 RouteActorInitialize(包含无缝行程携带)

    1. PreInitializeComponents - 在 Actor 的组件上调用 InitializeComponent 之前进行调用

    2. InitializeComponent - Actor 上定义的每个组件的创建辅助函数。

    3. PostInitializeComponents - Actor 的组件初始化后调用

  5. BeginPlay - 关卡开始后调用

Play in Editor

Play in Editor 路径与 Load from Disk 十分相似,然而 Actor 却并非从磁盘中加载,而是从编辑器中复制而来。

  1. 编辑器中的 Actor 被复制到新世界场景中

  2. PostDuplicate 被调用

  3. InitializeActorsForPlay

  4. 为未初始化的 Actor 执行 RouteActorInitialize(包含无缝行程携带)

    1. PreInitializeComponents - 在 Actor 的组件上调用 InitializeComponent 之前进行调用

    2. InitializeComponent - Actor 上定义的每个组件的创建辅助函数。

    3. PostInitializeComponents - Actor 的组件初始化后调用

  5. BeginPlay - 关卡开始后调用

生成

这是生成(实例)Actor 时的路径。

  1. SpawnActor 被调用

  2. PostSpawnInitialize

  3. PostActorCreated - 创建后即被生成的 Actor 调用,构建函数类行为在此发生。PostActorCreated 与 PostLoad 互斥。

  4. ExecuteConstruction

    • OnConstruction - Actor 的构建。蓝图 Actor 的组件在此处创建,蓝图变量在此处初始化

  5. PostActorConstruction

    1. PreInitializeComponents - 在 Actor 的组件上调用 InitializeComponent 之前进行调用

    2. InitializeComponent - Actor 上定义的每个组件的创建辅助函数。

    3. PostInitializeComponents - Actor 的组件初始化后调用

  6. OnActorSpawned 在 UWorld 上播放

  7. BeginPlay 被调用。

延迟生成

将任意属性设为“Expose on Spawn”即可延迟 Actor 的生成。

  1. SpawnActorDeferred - 生成程序化 Actor,在蓝图构建脚本之前进行额外设置

  2. SpawnActor 中的所有操作发生;PostActorCreated 之后发生以下操作:

    1. 通过一个有效但不完整的 Actor 实例设置/调用多个“初始化函数”

    2. FinishSpawningActor -调用后对 Actor 进行最终化,在 Spawn Actor 行中选取 ExecuteConstruction。

生命走向终点

销毁 Actor 的方式有许多种,但终结其存在的方式始终如一。

在游戏进程中

它们完全为任选,因为许多 Actor 在游戏进程中不会实际消亡。

Destroy - 游戏在 Actor 需要被移除时手动调用,但游戏进程仍在继续。Actor 被标记为等待销毁并从关卡的 Actor 阵列中移除。

EndPlay - 在数个地方调用,保证 Actor 的生命走向终点。在游戏过程中,如包含流关卡的 Actor 被卸载,Destroy 将发射此项和关卡过渡。调用 EndPlay 的全部情形:

  • 对 Destroy 显式调用

  • Play in Editor 终结

  • 关卡过渡(无缝行程或加载地图) 包含 Actor 的流关卡被卸载

  • Actor 的生命期已过

  • 应用程序关闭(全部 Actor 被销毁)

无论这些情形出现的方式如何,Actor 都将被标记为 RF_PendingKill,因此在下个垃圾回收周期中它将被解除分配。此外,可以考虑使用更整洁的 FWeakObjectPtr 代替手动检查“等待销毁”。

OnDestroy - 这是对 Destroy 的旧有反应。也许应该将这里的所有内容移到 EndPlay,因为它被关卡过渡和其他游戏清理函数调用。

垃圾回收

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

在对象的销毁过程中,以下函数将被调用:

  1. BeginDestroy - 对象可利用此机会释放内存并处理其他多线程资源(即为图像线程代理对象)。与销毁相关的大多数游戏性功能理应在 EndPlay 中 更早地被处理。

  2. IsReadyForFinishDestroy - 垃圾回收过程将调用此函数,以确定对象是否可被永久解除分配。返回 false,此函数即可延迟对象的实际销毁,直到下一个垃圾回收过程。

  3. FinishDestroy - 最后对象将被销毁,这是释放内部数据结构的另一个机会。这是内存释放前的最后一次调用。

高级垃圾回收

虚幻引擎 4 中的垃圾回收过程将构建共同被销毁对象的集群。较之于单个删除对象,集群可减少垃圾回收相关的总体时间和整体内存流失。可能随对象的加载创建子对象。将对象与其子对象组合到垃圾回收器的单个集群后,引擎可延迟释放集群使用的资源,直到整个对象可被释放时一次性释放全部资源。

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

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

  2. Cluster Merging - 如集群设为 true,Merge GC Clusters 选项(在 Project Settings 中的 Garbage Collection 部分下)可被设为 true,以便启动集群合并。此行为默认关闭,并不适合所有项目。在一个对象集群的构建过程中,对象将被检查,在其中可能找到对其他对象的引用。关闭集群合并的情况下(默认行为),那些引用将被记录;但被加载的对象和其子对象仍位于其原始集群中。开启集群合并的情况下,被加载对象和被引用对象的集群将被组合。例如,一个粒子系统资源可能引用一个材质资源;但如果集群合并被关闭,材质和粒子系统将因垃圾回收的原因而处在各自的集群中。开启集群合并后,因粒子系统引用材质,粒子资源集群将和材质集群进行合并。此行为通常不用于流动内容的游戏(如开放世界游戏),因为可能合并许多集群,形成更大、更多样化的对象群组。集群中的对象不会被单独销毁,将等待群组中的所有对象均被设为待销毁。而其中一小部分对象可能一直处于使用状态,因此内存中可能出现较大的对象集群。在特殊情况下(如大量引用对象未被其他对象共享的资源)可启用集群合并,并在代码中手动添加集群,可统一子对象的清理、减少垃圾回收器在游戏中必须进行的输入和依赖关系维持检查次数,进而提高性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

支持向量机(SVM)—— 详细推导及案例应用可视化

支持向量机(SVM) 1. 什么是支持向量机? 在上图中,我们想在二维平面中通过画出一条分界线将黑点与白点分开,很明显,我们认为在上面所画的三条分界线中H3H_3H3​是最好的,因为H1H_1H1​压根就没有…

【行为识别】差影法三维人体姿态行为识别【含Matlab源码 277期】

⛄一、简介 该课题为基于MATLAB差影法的人体姿态识别。需要准备对应的模板图片作为背景图,然后测试图和背景图进行作差,结合形态学知识,提取出人体轮廓,接上最外接矩形,得出矩形长宽,计算长宽比例&#xf…

江江文具店铺运营方案设计

目 录 摘 要 I ABSTRACT II 第一章 项目背景 1 1.1电子商务基本概念 1 1.2电子商务现状及发展趋势 1 1.3文具行业的发展现状 2 第二章 文具行业介绍 4 2.1文具行业的调查与分析 4 2.1.1文具行业电子商务渗透率 4 2.1.2文具行业内企业电子商务销售平台使用状况调查统计 5 2.1.3文…

自研芯片重构云上算力革新,满足用户所有负载的需求!

目前,云计算已深入到整个云基础设施,进入硬件协同创新的“深水区”,芯片创新之路是最底层的创新,是最具颠覆性的,也是改变云计算游戏规则的能力。 而亚马逊云科技硬件创新背后的初衷:为云而生的硬件设计&am…

【计算机毕业设计】71.大学生兼职信息系统源码

一、系统截图(需要演示视频可以私聊) 摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐…

react源码中的协调与调度

requestEventTime 其实在React执行过程中,会有数不清的任务要去执行,但是他们会有一个优先级的判定,假如两个事件的优先级一样,那么React是怎么去判定他们两谁先执行呢? // packages/react-reconciler/src/ReactFibe…

数字化门店| 运动场馆管理系统| 智慧门店小程序

忙碌了一天或闲暇之余想要放松,不少年轻人都会选择前往运动场馆进行各种运动,如打篮球、踢足球、打羽毛球等,一些城市的某个特定区域内聚集着不同品牌的运动场馆,相互之间竞争激烈。 如今,消费升级下,消费者…

Win10系统修改用户名以及C盘下Users用户名实操手册(实测有效)

当然,前提先说下如无必要,不建议修改C盘user下用户名,毕竟重装系统可能就在那一瞬间。我们要理解里面的原理,逻辑关系就会好操作很多了。再次申明,目前这只是针对Win10的实操,Win11的操作会有一些不同&…

铁矿行业商业智能BI经营分析框架(三)财务能力分析

铁矿行业属于黑色金属矿采选业,商业智能BI对于这个行业的财务能力指标分析框架跟其它行业大体上是一样的。比如从盈利能力、债务风险、营运能力、发展能力、现金流这几个角度去看。 财务分析 - 派可数据商业智能BI可视化分析平台 一、盈利能力 商业智能BI从资产、…

天黑了、让我为你关窗帘吧

今天遇到朋友发来的一个需求,需要做一个窗户上下拉窗帘的小小的交互,于是就有了今天的小DEMO,要实现下图一个效果,需要开窗帘,关窗帘,中途还可以暂停,就这样一个小小的效果,我们来分…

阿里18年架构师,带你分析经典算法应用思路,探究分布式背后原理

你要知道 长期以来,在996的工作压力下,工程师们更重视实践中的技巧,力求快速解决眼前的问题,而鲜有时间关注问题背后的底层原理。 表面看来,这种做法提高了工作效率,但实际上,这样容易形成“头疼医头,脚疼…

【Python】解决CNN中训练权重参数不匹配size mismatch for fc.weight,size mismatch for fc.bias

目录 1.问题描述 2.问题原因 3.问题解决 3.1思路1——忽视最后一层权重 额外说明:假如载入权重不写strictFalse, 直接是model.load_state_dict(pre_weights, strictFalse),会报错找不到key? 解决办法是:加上strictFalse&…

Ajax学习:解决跨域_JSONP

JSONP:非官方的跨域解决方案,纯粹依靠程序员的聪明才智,只支持get请求 JSONP是怎么工作的:再页面中有一些标签天生具有跨域能力,就像是link,img,iframe,script JSONP就是利用script标签的跨域能力来发送请求 如下所示&#xff1a…

[附源码]计算机毕业设计毕业生就业管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【Docker】Docker常用命令(包含Dockerfile指令)

目录一.Docker常用命令1.帮助命令2.镜像命令3.容器命令4.其他常用命令5.更多更详细命令二.Dockerfile常用指令1.常用指令2.CMD 和 ENTRYPOINT 的区别一.Docker常用命令 1.帮助命令 # docker version //查看docker版本号 # docker info //查看docker的系统信息…

外贸员的日常工作分享

外贸人米贸搜的日常工作流程为你整理如下。希望能帮到你: 外贸业务员的职责 一、业务人员在向国外买家询价前,要了解客户的基本信息,包括是否是终端客户,年采购量,消费区域,产品的用途,规格,质…

(附源码)SSM座位管理系统 毕业设计 250858

基于SSM的座位管理系统 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于学校的各种信息管理也是十分常见的。过去使用手工的管理方式对高校教室座位进行管理,造成了管理繁琐、难以维护等问题,如今使用…

python的opencv使用总结

作为最容易上手之一的语言,python拥有着大量的第三方库,这些第三方库的存在使得很多人可以专注于业务逻辑、数学逻辑而忽略繁琐的代码操作,python的opencv第三方库就是其中之一。 一、第三方库的安装和简单使用 安装 简单的pip安装就可以了…

【雷达波位编排】基于matlab相控阵雷达的波位编排仿真【含Matlab源码 2251期】

⛄一、相控阵雷达最优波位编排策略仿真算法 1 波位编排的最优化 相控阵雷达的扫描空域一般在修正球坐标系下进行指定,它的坐标原点为雷达站,雷达阵面法线在水平面的投影作为方位角的零度,顺时针为正,逆时针为负,有效取值范围为[-π/2,π/2],以水平面作为俯仰角的零度,向上为正…

分享5款2023年不容错过的宝藏软件

今天带来五款宝藏软件,身为宝藏男孩和宝藏女孩的你们,不试一下吗? 1.EPUB阅读器——Starrea Starrea 是一款Windows平台的EPUB电子书阅读器,它虽然只支持一个平台,但是提供了很多额外的功能,其中包括 文…