当前位置:网站首页>UE4-Actor基础知识
UE4-Actor基础知识
2022-06-27 17:57:00 【老闫在努力】
1.Actor的生命周期
1.Actor的创建
a.从磁盘加载,适用于关卡中的Actor创建。
创建流程:
1.LoadMap或AddToWorld被调用
2.从磁盘中加载Actor
3.执行PostLoad,可执行自定义版本化和修复操作。
4.InitializeActorsForPlay:初始化Actor
5.为未初始化的 Actor 执行 RouteActorInitialize
6.初始化组件:PreInitializeComponents - 在 Actor 的组件上调用 InitializeComponent 之前进行调用
InitializeComponent - Actor 上定义的每个组件的创建辅助函数。
PostInitializeComponents - Actor 的组件初始化后调用
7.BeginPlay - 关卡开始后调用
b.从编辑器中复制。
创建流程:
1.编辑器中的 Actor 被复制到新世界场景中
2.PostDuplicate 被调用
3.InitializeActorsForPlay:初始化Actor
4.为未初始化的 Actor 执行 RouteActorInitialize
5.初始化组件:同上
6.BeginPlay - 关卡开始后调用
c.实例Actor
创建流程:
1.SpawnActor 被调用
2.PostSpawnInitialize
3.PostActorCreated 构建函数类行为在此发生。PostActorCreated 与 PostLoad 互斥。
4.ExecuteConstruction:OnConstruction - Actor 的构建。蓝图 Actor 的组件在此处创建,蓝图变量在此处初始化
5.PostActorConstruction
6.初始化组件:同上
7.OnActorSpawned 在 UWorld 上播放
8.BeginPlay - 关卡开始后调用
d.延迟生成,将任意属性设为“Expose on Spawn”即可延迟 Actor 的生成。
创建流程:
1.SpawnActorDeferred - 生成程序化 Actor,在蓝图构建脚本之前进行额外设置
2.PostSpawnInitialize
3.PostActorCreated 构建函数类行为在此发生。PostActorCreated 与 PostLoad 互斥。
4.通过一个有效但不完整的 Actor 实例设置/调用多个“初始化函数”
5.FinishSpawningActor -调用后对 Actor 进行最终化,在 Spawn Actor 行中选取 ExecuteConstruction。
6.ExecuteConstruction:OnConstruction - Actor 的构建。蓝图 Actor 的组件在此处创建,蓝图变量在此处初始化
7.PostActorConstruction
8.初始化组件:同上
9.OnActorSpawned 在 UWorld 上播放
10.BeginPlay - 关卡开始后调用
2.Actor的销毁
销毁流程:
a.EndPlay - 在数个地方调用,保证 Actor 的生命走向终点。调用EndPlay的全部情形:
1.对 Destroy 显式调用
2.Play in Editor 终结
3.关卡过渡(无缝行程或加载地图) 包含 Actor 的流关卡被卸载
4.Actor 的生命期已过
5.应用程序关闭(全部 Actor 被销毁)
b.无论这些情形出现的方式如何,Actor 都将被标记为 RF_PendingKill,因此在下个垃圾回收周期中它将被解除分配。
c.一个对象被标记待销毁的一段时间后,垃圾回收会将其从内存中实际移除,释放其使用的资源。销毁过程:
1.BeginDestroy - 对象可利用此机会释放内存并处理其他多线程资源(即为图像线程代理对象)。
2.IsReadyForFinishDestroy - 垃圾回收过程将调用此函数,以确定对象是否可被永久解除分配。
3.FinishDestroy - 最后对象将被销毁,这是释放内部数据结构的另一个机会。
2.组件:
1.组件是一种特殊类型的对象,作为Actor中的子对象使用。
2.ActorComponent 是组件的基础类,定义可被添加到不同类型 Actor 的重复使用行为。
3.为使ActorComponent每帧更新并对场景产生影响,它们必须和场景进行注册。调用UActorComponent::RegisterComponent()即可执行注册。
4.也可取消ActorComponent的注册,避免它们被更新、模拟,或渲染。调用UActorComponent::UnregisterComponent()即可取消组件注册。
5.ActorComponent可通过其TickComponent()函数进行每帧更新。
3.生成Actor:
1.创建一个新的Actor示例的过程称为生成。生成Actors的过程是使用UWorld::SpawnActor()函数完成的。
2.SpawnActor类的结构如下:
AActor* UWorld::SpawnActor
(
UClass* Class,指出要生成的Actor的类。
FName InName,用作生成的Actor的名称。
FVector const* Location,用作生成的Actor的初始位置。
FRotator const* Rotation,用作生成的Actor的初始旋转度。
AActor* Template,用作生成的Actor时使用的模板。所生成的Actor将使用模板Actor的属性值进行初始化。
bool bNoCollisionFail,决定生成的Actor是否执行碰撞测试。如果为true,则在生成Actor时不进行碰撞测试。
bool bRemoteOwned,
AActor* Owner,拥有所生成的Actor的AActor。
APawn* Instigator,导致所生成的Actor施加伤害的挑衅者。
bool bNoFail,决定了如果某些条件不满足,生成Actor是否失败。
ULevel* OverrideLevel,指定生成Actor的Ulevel,也就是Actor的外部容器。
bool bDeferConstruction,决定是否运行构建脚本 。
)
3.SpawnActor()函数的用法:
AKAsset* SpawnedActor1 = (AKAsset*) GetWorld()->SpawnActor(AKAsset::StaticClass(), NAME_None, &Location);
4.Actor Ticking:
1.Tick指的是以规则间隔(常为每帧一次)在一个actor或组件上运行一段代码或蓝图脚本。
2.Actors和组件可设为每帧tick,也可设为以最低时间间隔tick,或完全不tick。此外,它们可在引擎每帧更新循环中的不同阶段被合并为组;也可接受单独指令,等待特定tick完成后再开始。
3.Tick 组可在代码或蓝图中指定。每个tick组将完成对指定的每个actor和组件的tick,然后再开始下一个tick组。
4.可拥有游戏性的tick组有:
a.TG_PrePhysics:Actor与物理对象(包括基于物理的附着物)进行交互时使用的tick组。
此tick中的物理模拟数据属于上一帧 — 也就是上一帧渲染到屏幕上的数据。
b.TG_DuringPhysics:此tick组只推荐用于无视物理数据或允许一帧偏差的逻辑。
c.TG_PostPhysics:此组可用于武器或运动追踪。渲染此帧时所有物理对象将位于它们的最终位置。
d.TG_PostUpdateWork:此组可将最靠后的信息送入粒子系统。
5.在BeginPlay中,actor将向引擎注册其主tick函数和其组件的tick函数。Actor的tick函数可通过PrimaryActorTick成员设为在特定tick组中运行,或完全禁用。
代码如下:
PrimaryActorTick.bCanEverTick = true;
PrimaryActorTick.bTickEvenWhenPaused = true;
PrimaryActorTick.TickGroup = TG_PrePhysics;
组件Tick函数代码如下:
PrimaryComponentTick.bCanEverTick = true;
PrimaryComponentTick.bTickEvenWhenPaused = true;
PrimaryComponentTick.TickGroup = TG_PrePhysics;
6.注意:PrimaryActorTick使用Actor的Tick()函数,而PrimaryComponentTick使用ActorComponent的TickComponent()函数。
边栏推荐
- shell脚本常用命令(四)
- Blink SQL内置函数大全
- Garbage collector driving everything -- G1
- 谈谈线程安全
- Is the account opening QR code given by CICC securities manager safe? Who can I open an account with?
- 一对一关系
- 流程判断-三目运算-for循环
- International School of Digital Economics, South China Institute of technology 𞓜 unified Bert for few shot natural language understanding
- Crawl national laws and Regulations Database
- Embracing cloud Nativity: Practice of Jiangsu Mobile order center
猜你喜欢

The IPO of Yuchen Airlines was terminated: Guozheng was proposed to raise 500million yuan as the major shareholder

华大单片机KEIL添加ST-LINK解决方法

数组练习 后续补充

DFS and BFS simple principle

Blink SQL built in functions

OpenSSL client programming: SSL session failure caused by an obscure function

Jinyuan's high-end IPO was terminated: it was planned to raise 750million Rushan assets and Liyang industrial investment were shareholders

昱琛航空IPO被终止:曾拟募资5亿 郭峥为大股东

crontab的学习随笔

基于STM32F103ZET6库函数蜂鸣器实验
随机推荐
Current market situation and development prospect forecast of the global ductless heating, ventilation and air conditioning system industry in 2022
经纬度分析
可靠的分布式锁 RedLock 与 redisson 的实现
Function key input experiment based on stm32f103zet6 Library
Mathematical derivation from perceptron to feedforward neural network
谈谈线程安全
Erreur Keil de Huada Single Chip Computer La solution de Weak
Current market situation and development prospect forecast of global 3,3 ', 4,4' - biphenyltetracarboxylic dianhydride industry in 2022
Is the account opening QR code given by CICC securities manager safe? Who can I open an account with?
过关斩将,擒“指针”(下)
Informatics Olympiad 1333: [example 2-2] blah data set | openjudge noi 3.4 2729:blah data set
Informatics Orsay all in one 1335: [example 2-4] connected block
Introduction to deep learning and neural networks
Market status and development prospect forecast of global 4-methyl-2-pentanone industry in 2022
使用MySqlBulkLoader批量插入数据
C# 二维码生成、识别,去除白边、任意颜色
Determine whether a variable is an array or an object?
CMS 执行的七个阶段
1025 PAT Ranking
華大單片機KEIL報錯_WEAK的解决方案