Actor 生命周期

【Akka】Akka中actor的生命周期与DeathWatch监控 Actor的生命周期在Actor系统中的路径代表一个“地方”,这可能被一个存活着的的actor占用着。最初,路径(除了系统初始化角色)是空的。当actorOf()被调用时,指定一个由通过Props描述给定的路径角色的化身。一个actor化身由路径和一个UID确定。重新启动仅仅交换Props定义的Actor 实例,但化身与UID依然是相同的。 当该actor停止时,化身的生命周期也相应结束了。在这一 阅读详情

一,一览图

二, 大致流程

三,细节

从磁盘加载

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

Actor生命周期理解 Actor生命周期理解 镇图:Actor内功心法图 Actor的生命周期可以用Hooks体现和控制,下面是默认的Actor Hooks的方法,我们可以选择性的进行重写: def preStart(): Unit = () def postStop(): Unit = () def preRestart(reason: Throwable, message: Option[Any] 阅读详情

相关推荐

虚幻引擎Actor类生命周期

构造函数:在Actor实例化时调用(例如通过代码或蓝图生成)。BeginPlay:在游戏开始后,Actor完全初始化后调用,适用于涉及更复杂的游戏逻辑初始化。

子燕若水的博客 1277

4,引擎初始化--(5)初始化actor--5,初始化各个关卡中的各个actor-PostInitializeComponents()

ue

coder 403

【Akka】Akka Actor生命周期

用于自我学习。Actor的生命周期是使用Hooks体现和控制的,我们可以重写相关的Hooks,从而实现对Actor生命周期各环节的细粒度控制。注意:只在重启的时候才会被调用。它们默认调用了preStart和postStop,但是调用它们的时候就不再直接调用preStart和postStop了。这样我们就能够决定,启动、停止和重启。

九师兄 940

UE4 游戏模块初始化顺序

最近看教学,有个讲解UE4初始化顺序的,记录一下。 首先创建一个Actor,Character,GameInstance,GameMode,LevelScriptActor(关卡),PlayerController。 首先看一下actor的生命周期 Actor的头文件对于生成顺序注释是: 我们把actor蓝图直接拖入ue关卡中的话,应该会走从磁盘加载的流程。 已位于关卡中的...

weixin_30394981的博客 1989

深入理解Akka Actor模型与生命周期

本文深入探讨了Akka框架中的Actor模型,包括如何加载和测试Actor类,Actor之间的层次结构关系,以及如何在Actor系统中识别和引用特定的Actor。我们还研究了Actor的生命周期,理解了异常处理、重启策略以及Actor引用与Actor对象之间的关系。

weixin_28850145的博客 846

机器学习ROC曲线中的阈值thresholds

在ROC曲线上的不同点对应于不同的阈值。根据任务的具体要求,可以选择合适的阈值,以达到平衡召回率和误报率,或者根据具体应用场景调整模型的工作点。,表示样本属于正例的概率。这个概率值可以被截断为二元分类的决策,通过选择一个阈值来决定样本是被分类为正例还是负例。通过改变阈值,可以得到不同的真正例率(TPR)和假正例率(FPR),从而绘制出ROC曲线。总体来说,ROC曲线提供了模型在不同阈值下的性能综合情况,帮助分析模型的分类能力。通常来说,随着阈值的增加,TPR会减小,而FPR会增加。ROC曲线的绘制涉及。

行子的博客 3654

UE Actor生命周期

其实,生命周期主要包括了生成(SpawnActor),初始化数据,生命周期结束(Destroy),垃圾回收/高级垃圾回收。将对象与其子对象组合到垃圾回收器的单个群集后,引擎可延迟释放群集使用的资源,直到整个对象可被释放时一次性释放全部资源。这个有多种方式销毁Actor,但是从世界中删除它们的方式是一样的。事实上,大部分Actor在运行中不会实际销毁,可以看垃圾回收。一个对象被标记待销毁的一段时间后,垃圾回收会将其从内存中移除,释放其使用的资源。在关卡中实例化或生成Actor,包括如何初始化Actor。

yajunjiao的专栏 2221

Windows事件ID 10010报错:DCOM注册超时与Game Bar修复指南

DCOM(分布式组件对象模型)是Windows中用于跨进程组件通信的核心机制,其注册超时问题常表现为事件ID 10010报错。当Game Bar的PresenceWriter组件因权限配置不当、组件损坏或开机资源竞争而无法在限定时间内向DCOM注册时,系统会记录该错误,并可能伴随DCOM服务主机CPU占用升高或游戏栏功能异常。理解DCOM激活原理与Network Service账户权限,有助于从权限修复、组件重注册及开机时序优化等层面系统排查。本文针对不同Windows版本,提供从静默处理到根治的完整方案,

weixin_33563728的博客 927

UE5——Actor生命周期——生成

UE5——Actor生命周期——生成

weixin_43945471的博客 1244

WGCNA样本量不够怎么办?5种替代方案帮你解决小样本基因共表达分析难题

本文针对WGCNA样本量不足的问题,提供了5种科学替代方案,包括CEMiTool、参数调整、多组学数据整合、机器学习特征提取和公共数据利用。这些方法帮助研究者在小样本条件下仍能进行可靠的基因共表达分析,特别适用于罕见病和珍贵临床样本研究。

weixin_42554042的博客 304

Cursor设置界面汉化保姆级教程:手把手教你修改JS文件实现中文界面(附避坑指南)

本文提供Cursor编辑器设置界面汉化的详细教程,从定位JS文件到安全修改实现中文界面,包含必备工具清单、文件路径指引和常见问题解决方案。通过手把手教学帮助用户轻松完成汉化,提升使用体验,特别适合不熟悉英文界面的开发者。

weixin_29007809的博客 1414

UE的Gameplay框架(二) —— Actor和Component

这篇博客聊一下UE的Gameplay框架很重要的一部分 Actor 和 Component。

hhhcbw的博客,欢迎各位来访 2281

PHY6252开发实战:从零构建BLE串口透传应用

本文详细介绍了PHY6252开发板在BLE串口透传应用中的实战经验,包括开发环境搭建、BLE串口透传例程解析、AT指令集实现与扩展、数据透传机制优化以及常见问题排查指南。通过智能家居遥控器项目案例,展示了PHY6252在低功耗物联网设备开发中的实际应用。

weixin_29183637的博客 313

Actor 的生命周期——处理

一、监督Erlang 将容错性引入了Actor 模型,它使用的概念叫做监督(supervision)。监督的核心思想就是把对于失败的响应和可能引起失败的组件分隔开,并且把可能发生错误的组件通过层级结构来组织,以便管理。1.监督的层级结构Akka 使用Actor 层级结构来描述监督。当我们创建Actor 时,新建的Actor 都是作为另一个Actor 的子Actor,父Actor 负责监督子Acto...

1、测试博主技术知识分享 2、pos行业知识技术分享 3、java后端技术知识分享 4、嵌入式技术知识分享 5、运维部署相关知识分享 1259

解锁机器人逆运动学算法:从理论到实战

机器人逆运动学,简单来说,就是已知机器人末端执行器(如机械臂的手部、工具等)期望达到的位置和姿态,求解机器人各个关节需要达到的角度或位移的过程。在机器人的实际应用场景中,逆运动学起着不可或缺的作用。以工业制造中的焊接机器人为例,为了完成复杂的焊接任务,焊接头(末端执行器)需要精准地到达工件上的各个焊接点,并保持合适的姿态以确保焊接质量。这时,逆运动学算法就根据焊接点的三维坐标以及焊接头应有的姿态(如角度等),计算出机械臂各个关节的转动角度,从而控制机械臂带动焊接头准确地运动到目标位置。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2052

FastAPI基础项目:仿头条新闻的web项目,实现基本的新闻列表页和详情页查看功能

该项目是一个基于FastAPI和MySQL的新闻应用入门项目。主要包含新闻列表页和详情页两个功能页面。项目结构清晰,包含主应用文件、数据库脚本和HTML模板。使用SQLAlchemy进行数据库操作,通过脚本可自动生成50条示例新闻数据。环境配置简单,仅需安装FastAPI、MySQL驱动等基础依赖,通过.env文件管理数据库连接。该项目适合作为FastAPI+MySQL的入门学习案例,展示了基本的CRUD操作、分页查询和模板渲染功能。

数据知道的博客 4428

浅谈Actor生命周期

闲话:之前有认识的小伙伴出去面试被问到了Actor的生命周期,故而自己去研究了下,结合各位大神的文章及官方说明文档,将自己理解的部分记录在这。 从以上图中是不是看到了两个字?____________________绝望?哈~ UE4中实例(创建)Actor有几种方式:1. Load from Disk(从磁盘加载 ) 2. Play In Editor(简称PIE)3. Spawning (动态生成 SpawnActor)4. Deferred Spawn(延迟生成)。 Load from Disk(从磁

赵淑媛 715

芒果YOLOv12改进13:独家原创改进最新 CFNet 核心结构|即插即用 | 首发改进显著提升检测性能,小目标检测涨点必备

芒果YOLOv12改进13:独家原创改进最新 CFNet 核心结构|即插即用 | 首发改进显著提升检测性能,小目标检测涨点必备

包括YOLOv5、YOLOv7、YOLOv8等模型改进 289

5、Akka Actor生命周期

Actor生命周期 Actor的生命周期是使用Hooks体现和控制的,我们可以重写相关的Hooks,从而实现对Actor生命周期各环节的细粒度控制,各种Hook顺序关系如下图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 prestart():在构造函数之后调用,重启时不会执行。 postStop():在重启之前调用,异常重启时不会执行。 preRestart(reason, message):在 actor 异常重启前保存当前状态,默认情况下会调用 postStop()。 po

数据工匠记 2183

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Actor生命周期---停止actor

Actor生命周期包括:创建并启动,恢复运行,重启,停止四个阶段。 启动:actorOf方法创建,拥有指定的path,uid。 启动会默认调用preStart(),可以在这里干些资源化的工作。恢复:通过容错机制,让actor恢复并继续运行,这时可以延用之前的实例,状态还在。重启: 1、调动旧实例的preRestart方法(停掉所有子级actor,并调用postStop方法) 2、创建新的实例,在...

欲望以提升热忱 毅力以磨平高山 1604

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Actor的生命周期

haisong1991的博客 431

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Unreal的Actor的生命周期

https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Actors/ActorLifecycle/index.html

茶向 2493
上一篇: mysql基础信息
下一篇: UE4HTTP下载网速过慢问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值