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

目录

谈谈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指令

UEActor生命周期包括以下几个阶段:创建、初始化、开始播放和销毁。 首先,在创建阶段,UE会根据蓝图或代码创建Actor对象,并将其添加到场景。在这个阶段,Actor的构造函数会被调用。 接下来,在初始化阶段,UE会调用Actor的InitializeComponents()函数来初始化Actor上的所有组件。这个函数会遍历Actor上的所有组件,并根据需要激活和初始化它们。 然后,在开始播放阶段,UE会调用Actor的BeginPlay()函数。在这个函数,可以编写自定义的逻辑来处理Actor开始播放时的操作。例如,可以在这里初始化变量、加载资源或执行其他必要的操作。 最后,在销毁阶段,当Actor不再需要时,UE会调用Actor的Destroy()函数来销毁它。在这个函数,可以进行一些清理工作,例如释放资源、取消注册组件等。 需要注意的是,UEActor生命周期是由UE引擎自动管理的,开发者可以在相应的函数编写自己的逻辑,但不能直接控制Actor的创建和销毁时机。 综上所述,UEActor生命周期包括创建、初始化、开始播放和销毁这几个阶段,每个阶段都有相应的函数可以进行自定义操作。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Unreal EngineActor理解生成消亡](https://blog.csdn.net/Jason6620/article/details/128399837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [UE4 Actor生命周期 SpawnActor DestroyActor剖析](https://blog.csdn.net/u011718663/article/details/50202307)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值