UE4C++⼊门之路7-UObject,AActor,UActorComponent,US。。。UObject,AActor,UActorComponent,UStruct介绍
前⾔
在UE4中,很多C++类或者说是游戏性对象都会继承⾃这四个类,此⽂旨在简单介绍此四个类分别是⼲什么的以及有什么特点,后续有机会再深⼊学习-----
UObject
UE4本⾝的⼀套系统让UE4的C++⽐普通的C++多了很多功能,其中最基本的类,也就是U++的对象类,UObject便结合UClass提供引擎中最重要的若⼲基础服务:
使得UE4中的C++拥有了C#相似的⾯向对象⾼级特性
属性和⽅法反射
属性序列化
垃圾回收
按命名查UObject单人开发选ue4还是unity
可配置属性数值
属性和⽅法⽹络⽀持
派⽣⾃UObject的每个类拥有⼀个为其创建的单例UClass,此对象包含关于类实例的所有元数据。UObject和 UClass是游戏性对象在其⽣命期中执⾏所有操作的根源。多数的游戏性开发不会直接从UObject进⾏派⽣,⽽从AActor和UActorComponent进⾏派⽣。编写游戏性代码⽆须了解UClass/UObject的⼯作细节。但了解这些系统的存在也会有所帮助。
AActor
AActor是作为游戏体验⼀部分的对象。AActor将被设计师放置在关卡中,或通过游戏性系统在运⾏时创建。所有可放⼊关卡的对象均延展⾃此类。范例有AStaticMeshActor ,ACameraActor和APointLightactor。AActor派⽣⾃UObject,因此可使⽤上⼀部分列出的所有标准功能。可通过游戏性代码(C++或蓝图)显式销毁AActor。
拥有关卡从内存被卸载后,通过标准垃圾回收机制进⾏销毁。
AActor负责游戏对象的⾼级⾏为。AActor还是可进⾏⽹络复制的基类。在⽹络复制中,AActor还可分布UActorComponent 的信息。UActorComponent为需要⽹络⽀持的AActor所拥有。
AActor拥有其⾃⾝的⾏为(通过继承的特殊化),但它们仍作为UActorComponent 层级的容器(通过合成的特殊化)。这通过AActor的RootComponent成员完成。此成员包含⼀个单⼀UActorComponent,⽽这个组件⼜可依次包含其他组件。在AActor可被放⼊关卡之前,它必须包含⾄少⼀个USceneComponent。此组件包含此 AActor的平移、旋转和尺⼨。
这是我们⽤的可以说是最多的类了,⽽且每当此类被创建,我们可以在代码中看到三个⽅法
BeginPlay :对象⾸次出现在游戏进程中时调⽤。相当于Unity的Start
Tick :每帧调⽤⼀次,在⼀段时间内执⾏操作。相当于Unity的Update
EndPlay :对象离开游戏进程时调⽤。
UActorComponent
UActorComponent即相当于组件,⽽且继承此类的实现可以在蓝图中的AddComponent中看到,他们都是拥有⾃⼰特定功能的组件,通过添加组件的组合,可以很好的制作成不同的游戏对象,Unity也是这么做的,如图
UActorComponent拥有其⾃⾝⾏为,通常负责在多种类型AActor之间共享的功能,如提供可视⽹格体、粒⼦效果、摄像机透视和物理互动。通常为AActor指定的是与其在游戏中全局作⽤相关的⾼级⽬标,⽽UActorComponent 通常执⾏的是⽀持这些⾼级⽬标的单个任务。组件也可附着到其他组件,或
为Actor的根组件。组件只能附着到⼀个⽗组件或Actor,但可被多个⼦组件附着。想象⼀个组件树。⼦组件拥有与其⽗组件或Actor相对的位置、旋转和尺⼨。
UStruct
使⽤UStruct时不必从任意特定类进⾏延展,只需要使⽤USTRUCT()标记结构体,编译⼯具将执⾏基础⼯作。
和UObject 不同,UStruct 不会被垃圾回收。
如需要创建其动态实例,则必须⾃⾏管理其⽣命周期。UStruct 为纯旧式数据类型。它们拥有UObject 反射⽀持,以便在虚幻编辑器、蓝图操作、序列化和⽹络通信中进⾏编辑。
简单的⽣命周期介绍
之前我们讨论了AActor⽣命周期的⼀个⼦集。
BeginPlay :对象⾸次出现在游戏进程中时调⽤。相当于Unity的Start
Tick :每帧调⽤⼀次,在⼀段时间内执⾏操作。相当于Unity的Update
EndPlay :对象离开游戏进程时调⽤。
对于放置在关卡中的Actor⽽⾔,通过想象便可轻松理解⽣命周期: Actor 加载,出现,随后关卡被卸载,Actor被销毁。
运⾏时创建和销毁的过程是怎样的?UE4在运⾏时⽣成调⽤AActor的创建。较之于在游戏中创建⼀个普通对象,Actor 的⽣成稍显复杂。原因是AActor需要通过各种运⾏时系统进⾏注册,以满⾜所有需要。需要设置Actor的初始位置和旋转。物理可能需要知晓这些信息。负责告知Actor进⾏tick的管理器需要知晓这些信息。诸如此类。
因此,我们拥有⼀个⽤于Actor⽣成的⽅法:UWorld::SpawnActor()。⼀旦Actor成功⽣成后,它的BeginPlay()⽅法将被调⽤,下⼀帧将出现Tick()。
⼀旦Actor的⽣命期完结,即可调⽤Destroy()将其销毁。在此过程中将调⽤EndPlay(),在此可设置⾃定义销毁逻辑。控制Actor存在时长的另⼀个选项是使⽤寿命成员。可在对象的构建函数中设置时间段,或通过运⾏时的其他代码进⾏设置。时间量耗尽后,Actor将⾃动调⽤Destroy()。
UE4第三⼈称模板的组件剖析
当我们⽤第⼀⼈称FPS模板创建成功⼯程⽂件后,我们打开⼈物的蓝图,可以看到他的组件排列情况
如下图
RootComponent为CapsuleComponent。附着到CapsuleComponent 的是 ArrowComponent、Mesh组件和FirstPersonCameraComponent。以“FirstPersonCameraComponent”为⽗项的“Mesh1P”组件,意味着第⼀⼈称⽹格体与第⼀⼈称摄像机相对
3D中效果如下
此组件树被附着到⼀个Actor类。从此例中可了解到:使⽤继承和合成可构建复杂的游戏性对象。
需要对现有AActor或 UActorComponent进⾏⾃定义时使⽤继承。也就是继承AActor在C++层次实现很多功能。
需要多个不同AActor类型共享功能时使⽤合成。即添加UActorComponent即组件快速得到某功能。
结束!如果觉得我写的还不错,不要吝啬⼀个赞奥,这是对我的最⼤⽀持了,谢谢⼤家,下篇再见!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。