Unreal Engine中的Actor:理解、生成与消亡

news2025/1/16 4:52:34

目录

谈谈Actor

生成(实例化)Acotr

StaticClass/UClass:类模板/类的快照

Actor的生命周期

Actor的消亡

Destroy:标记删除

SetLifeSpan:设置存活时间

Destroyed:消亡Actor的通知

EndPlay:消亡时回调

删除(消亡)类型介绍


凡是能拖进场景编辑器中的,都是actor

谈谈Actor

UE的场景可以理解为一个世界,而世界中物体的根源就是actor。

其中根源(actor)的根源则是UObject,这个后面会说。

actor是用来表示世界中任何物体的高级抽象类,由Actor进行构建,由Component进行行为组装,来完成整个游戏世界的元素展示。

能拖到世界场景的是且只能是actor。

可以比喻为:

世界场景就是话剧的舞台,actor则是上面的演员。演员起初是不具有任何动作、服装、以及表情甚至台词的,这些都需要我们为它进行详细的设计,而设计的过程就是为actor添加各种的component。

同时话剧也分幕前和幕后工作人员,也就是说即便舞台上没出现某些人,也不意味着整出戏没有某些人的参与。换到UE中就是,出现在世界场景视口中一定会存在于世界大纲中,但是世界大纲中存在的actor不一定要出现在视口中。

具体创建过程可看:UE4 C++:Actor与Component的创建、销毁_BBBourne的博客-CSDN博客_ue4销毁actor

生成(实例化)Acotr

有两种方法:

①从编辑器里拖到世界场景中(编辑器Editor运行,游戏就已经开始跑了,只不过没有Tick)

简单直观,无需编码,但可能影响游戏启动速度,增加场景负担。

②SpawnActor

复杂度高但可控性强,灵活。

而SpawnActor也有两种主要的方式:

  • 蓝图中可以通过SpawnActorOfClass来生成
  • 在C++中需要通过UWorld指针来创建,调用SpawnActor。

 

对于每一个在场景中存在的对象,本身都具有获取UWorld指针的能力。所以只需要调用GetWorld函数即可获得UWorld指针。

其实还有另一种途径生成actor:

③跟随着场景一起被创建

StaticClass/UClass:类模板/类的快照

生成Actor可用另外一种方式,当然方法还是SpawnActor,只不过传入这个工厂模板函数的参数有一些变化:

这里的StaticClass()是一个静态函数。返回的是一个UClass*,其作用是一个“类的快照”,用于生成Actor。

在编辑器中直接的作用就是,C++创建的类,可以和蓝图一样被拖进场景中,并且一样可以被当做某些参数被设置。比如在一些下拉菜单中选择对象等。

之所以这么做的目的,是实现反射等机制,同时也为了与蓝图交互

Actor的生命周期

Actor的创建方式有三种,但差别不大。总体如下:

  1. 构造函数调用
  2. 初始化成员变量
  3. 如有蓝图,则初始化蓝图数据
  4. 构建组件
  5. BeginPlay(标志着Actor被创建到世界当中)
  6. Tick

Actor的消亡

Destroy:标记删除

可以自身调用Destroy()进行强制消亡操作。

默认是无参的。其实有两个参数:

  • bNetForce:是否强制网络同步删除
  • bShouldModifyLevel:主要用来控制先删除actor再修改关卡,还是先修改关卡再删除actor。默认为true,先修改关卡再删除actor

在Destroy()的源码中有一个IsPendingKill这一个东西,主要是用来标记这个actor是否等待被删除。

SetLifeSpan:设置存活时间

Destroyed:消亡Actor的通知

当对象被删除,但并未从内存中删除,进行回调操作

 

EndPlay:消亡时回调

当对象被删除,并从内存中删除,进行回调操作

删除(消亡)类型介绍

  • Destroyed:当actor或Component彻底被删除
  • LevelTransition:关卡切换是删除回调(非关卡流)
  • EndPlayInEditor:编辑器关闭时
  • RemovedFromWorld:关卡流切换被释放时
  • Quit:游戏退出

 

题外话:

只有GameMode、PlayerController、Pawn、GameState可以加Exec指令

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

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

相关文章

chatGPT对接微信

代码地址: https://github.com/jeffcail/go-wecaht-bot 喜欢的帅锅美女可以点个star哦😊 背景 玩一玩chatGPT。只因GPT你太美~~~ wechat SDK go get github.com/eatmoreapple/openwechat实现功能 自动通过好友申请用户私聊回…

我的转行之路

我一直想为自己没有继续从事编程,而转到铁路行业找一个合理的理由,来掩饰我的愚蠢。我日思夜想终于找到了更合理更有说服力的理由,十个字,目光的短浅,认知的缺乏。 那个时候,只被一毕业就能拿到不错的工资…

Python还有发展前景吗?现在该怎么去学习?

从2008年开始Python就突然火了起来,腾讯最近组织了一个大型Python技术交流峰会,由此可见Python现在已经到了我们不能想象的境界,一切的步伐都要跟着大公司走,腾讯这样级别的公司都这样重视Python技术,可见Python的发展…

什么样的人适合当黑客?

别说我没资格说这些话或是我的话是废话(对你来说是,对别人呢?),我想任何人都有资格尽自己的能力帮助别人. 首先,看到这篇文章,觉得好长,好烦,懒的看,走人… OK,我觉的你不适合做黑客! 07年我考上大学,选择了机械制造及其自动化(数控编程&a…

【linux kernel】linux内核裁剪随想

为什么需要裁剪? 首先,裁剪并不一定是缩小内核镜像的大小,而是移植和适配。内核支持的特性很多,站在项目的角度,不一定全部需要这些特性和功能。这时候就需要将不需要的特性和功能剔除,随着这个过程的进行…

LabVIEW在两台计算机之间传输数据

LabVIEW在两台计算机之间传输数据 有几种网络协议可用于完成此任务。使用正确的网络协议白皮书将完成为应用选择正确协议的任务。它涵盖了控制和监视应用中最常用的通信模型,并根据配置、性能、易用性等推荐最适合每种情况的网络协议。 参考的白皮书重点介绍了三种…

【MAX7800与ESP8266mcu通讯关键字控制】

【MAX7800与ESP8266mcu通讯关键字控制】 1. 前言2. 实验条件2.1 硬件条件2.2 软件条件3. 程序编写3.1 ESP8266程序解剖3.2 MAX7800程序解剖4. 实验效果4.1 esp8266打印如下4.2 max7800打印如下5. 小结1. 前言 前期搭好MAX7800 的eclipse和ESP82666的Arduino开发环境,现在开始…

98.第十九章 MySQL数据库 -- MySQL数据库架构、存储引擎、服务器配置和状态(八)

4.MySQL架构和性能优化 MySQL是C/S 架构的,connectors是连接器;可供Native C API、JDBC、ODBC、NET、PHP、Perl、 Python、Ruby、Cobol等连接mysql;ODBC叫开放数据库(系统)互联,open database connection; JDBC是主要用于java语言利用较为底层的驱动连接数据库;以上这…

[网络工程师]-VLAN

1、VLAN基础 虚拟局域网(Virtual Local Area Network,VLAN)是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的数据交换技术。VLAN技术主要应用在三层交换机中。 VLAN是基于物理网络构建的逻辑子网,所以…

Java项目:springboot在线选课系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 后端技术包含springbootmybatisspring securitymysqlredis 前端技术包含 semanticUI thymeleaf模板引擎 使用教程 1. 下载项目之后 等待ma…

网络存储ISCSI实战

一、网络存储 目前应用最为广泛的两种数据存储设备:NAS与SAN 1、NAS NAS的全称是Network-attached storage,即网络附加存储,并不需要单独的网络用于存储IO,更适用于中小型的存储解决方案。 NAS设备通常是一个完整的服务器架构…

天天说手撕红黑树?你真的能撕的下来吗?(详细解释+代码注释)

目录 一、你还记得什么是红黑树吗? 二、AVL树与红黑树的比较 三、模拟实现红黑树 3.1、红黑树的定义 3.2、插入结点 3.2.1、情况一 3.2.2、情况二 3.2.3、情况三 四、红黑树的验证 4.1、检查中序遍历是否有序 3.2、检查是否出现两个连续的红色结点 4.3、检…

数据护航 安全立方—海泰方圆数据安全治理立体式框架

发展数据安全是必然趋势 2022年6月,中央全面深化改革委员会第二十六次会议强调,“数据基础制度建设事关国家发展和安全大局,要维护国家数据安全,保护个人信息和商业秘密,促进数据高效流通使用、赋能实体经济&#xff0…

【JVM】jvm虚拟机中的堆

jvm虚拟机中的堆一、JVM体系结构二、Java堆简介2.1 堆的特点2.2 堆空间细分2.3 堆空间的分代思想2.4 堆的默认大小三、JVM堆内存常用参数四、垃圾回收算法(GC,Garbage Collection)4.1 标记-清除(Mark-Sweep)4.2 复制&a…

【代码审计-1】PHP无框架项目SQL注入

代码审计 教学计划:审计项目漏洞Demo->审计思路->完整源码框架->验证并利用漏洞 教学内容:PHP,JAVA网站应用,引入框架类开发源码,相关审计工具及插件使用 必备知识点:环境安装搭建使用&#xff0c…

python是什么鬼?为什么学会他就能月入过万,它真的这么牛吗?

为什么那么多人选择学习python? Python在人工智能、大数据、自动化运维、全栈开发等方面具有独特的优势。随着Python继续占据编程语言主流的趋势,全国各城市的招聘岗位和薪酬将大幅增加。此外,随着人工智能在中国的投资和规划,对…

使用docker compose一键部署多个服务

docker compose 是 docker 官方的开源项目,用来实现对 docker 容器集群的快速编排 下载安装 官网下载地址:点这里 我用的是云服务器,所以就直接用yum安装了,直接执行这两条命令,等安装结束后查看版本,看到…

SpringCloud系列(六)Feign 客户端的配置及使用

❓Feign 是什么? 🙊Feign 是一个声明式的 http 客户端, 其主要的作用就是帮助我们实现 http 的请求发送, 正如官网所说, Feign使编写Java http客户端更容易; ❓❓为什么要用 Feign? 🙊🙊如在未学习 Feign 之前, 我们利用的是 RestTemplate …

2022年宜春市职业院校技能大赛中职组“网络搭建与应用”赛项任务书

2022年宜春市职业院校技能大赛中职组“网络搭建与应用”赛项任务书 (总分1000分) 赛题说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分二个部分,其中: 第一部分:网络搭建及安全部署项目 第二部分:服务器…

【实时数仓】DWS层访客主题计算(续)、商品主题计算

文章目录一 DWS层-访客主题计算1 写入OLAP数据库&#xff08;1&#xff09;增加ClickhouseUtila JdbcSink.<T>sink( )的四个参数说明b ClickhouseUtil中获取JdbcSink函数的实现c 构造者设计模式d 赋值给问号占位符并创建TransientSink注解e 在GmallConfig中配置ClickHous…