四大基类:UObject, AActor, UActorComponent, UStruct
UObject :最基本的构建基类
UObject + UClass 提供了最主要的服务:
属性和方法的映射(Reflection of properties and methods)
属性的序列化(Serialization of properties)
垃圾回收(Garbage collections)
根据name找到UObject(Finding UObjects by name)
可配置的属性值(Configurable values for properties)
属性和方法的网络支持(Networking support for properties and methods)
每个UObject的导出类都会自动创建一个单独的UClass,里面包含了关于实例的所有元数据(meta data)。UObject和UClass是一个游戏对象(gameplay object)在它生存时间内做的任何事情的根源(UObject and UClass together are at the root of everything that a gameplay object does during its lifetime)。帮助我们区别UClass和UObject之间的不同地方的途径是,UClass是描述了一些东西,比如一个UObject实例长什么样子,什么属性是可以被序列化的,网络相关的东西等等。大多数游戏开发工作都不会直接从UObject继承,而是使用AActor或UActorComponent。为了写游戏代码,开发者不必知道UClass/UObject的工作细节,不过知道有这两个东西存在还是有好处的。
AActor:
AActor的对象,是游戏体验中的一部分。AActor对象可以被关卡设计者放置到关卡中,或者在运行时通过游戏系统创建。所有继承于AActor的类的对象都可以放置在一个Level中,例如AStaticMeshActor,ACameraActor, APointLight .AActor从UObject派生,所以它可以享受前一节提到的所有服务。AActor可以通过游戏代码(c++/蓝图)显式地回收,或者当它所属的Level对象被移除时通过标准垃圾回收机制回收。AActor负责游戏对象的高级行为。同时,AActor也是网络服务中可以被重用的对象的基类(AActors are also the base type that can be replicated during networking?)。在网络应答期间,AActor还可以为所有需要网络支持的AActor里的UActorComponent对象分发信息。
虽然AActor拥有自己的行为(特别是通过继承得到的),但是它也可以作为UActorComponents层级的容器(特别是通过组合的)。这是通过AActor的RootComponent组件来完成的,它包含了一个UActorComponent,
当然,也可以包含很多个。在AActor对象被放置在Level里面之前,AActor必须至少包含一个USceneComponent对象来保证AActor能进行平移,旋转,缩放操作。
在AActor的生存周期里,有一系列事件会被调用。下面的事件列表简单地表明它的生存周期。
BeginPlay——当对象第一次进入游戏实体时被调用
Tick——随着时间的流逝,每帧被调用一次
EndPlay——当对象离开游戏空间时被调用
运行时的生命周期: