目录
谈谈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的创建方式有三种,但差别不大。总体如下:
- 构造函数调用
- 初始化成员变量
- 如有蓝图,则初始化蓝图数据
- 构建组件
- BeginPlay(标志着Actor被创建到世界当中)
- Tick
Actor的消亡
Destroy:标记删除
可以自身调用Destroy()进行强制消亡操作。
默认是无参的。其实有两个参数:
- bNetForce:是否强制网络同步删除
- bShouldModifyLevel:主要用来控制先删除actor再修改关卡,还是先修改关卡再删除actor。默认为true,先修改关卡再删除actor
在Destroy()的源码中有一个IsPendingKill这一个东西,主要是用来标记这个actor是否等待被删除。
SetLifeSpan:设置存活时间
Destroyed:消亡Actor的通知
当对象被删除,但并未从内存中删除,进行回调操作
EndPlay:消亡时回调
当对象被删除,并从内存中删除,进行回调操作
删除(消亡)类型介绍
- Destroyed:当actor或Component彻底被删除
- LevelTransition:关卡切换是删除回调(非关卡流)
- EndPlayInEditor:编辑器关闭时
- RemovedFromWorld:关卡流切换被释放时
- Quit:游戏退出
题外话:文章来源:https://www.toymoban.com/news/detail-445514.html
只有GameMode、PlayerController、Pawn、GameState可以加Exec指令文章来源地址https://www.toymoban.com/news/detail-445514.html
到了这里,关于Unreal Engine中的Actor:理解、生成与消亡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!