UObject
UObject表示对象,准确来说,虚幻引擎中的对象基础类为UObject
UObject提供了以下功能:
- 垃圾收集(Garbage collection)
- 引用自动更新(Reference updating)
- 反射(Reflection)
- 序列化(Serialization)
- 自动检测默认变量的更改(Automatic updating of default property changes)
- 自动变量初始化(Automatic property initialization)
- 和虚幻引擎编辑器的自动交互(Automatic editor integration)
- 运行时类型识别(Type information available at runtime)
- 网络复制(Network replication)
使用UObject是因为要使用上述某些功能,而不是因为他是UE对象基类
Actor
· 所有可以放入关卡的对象都是Actor,比如摄像机、静态网格体、玩家起始位置。Actor支持三维变换,例如平移、旋转、缩放,你可以通过游戏逻辑代码(C++或蓝图)创建(生成)或销毁Actor
· 在C++中,AActor是所有Actor的基类
· Actor继承自UObject
· Actor能够被挂载组件
· Actor拥有Tick的能力
· 组件是Component,并不是Actor
· Actor并不自带Transform,Actor的Transform来自于其RootComponent
· 绝大部分在场景中的对象,无论是有形的还是无形的,都是Actor
Component
· 组合大于继承
· 为了弱化Actor的继承链,提出了Component的概念
· Component继承自UObject,比Actor轻量
· 主要存在两种Component,SceneComponent和ActorComponent,SceneComponent在场景中存在Transform,也能有坐标系父子关系
· UE更倾向于编写功能单一的Component,而不是一个整合了其他Component的大管家Component
· Component应该作为Actor较独立可复用性功能的载体,Actor本身也拥有数据存储能和逻辑实现能力,主要用于实现游戏业务逻辑
· Actor在世界中的位置属性、父子关系,全权由Component接管
Pawn
· 继承自Actor
· Pawn相比于Actor,可以被Controller控制
· 相比于Actor的逻辑,Pawn通过Controller解耦了游戏的业务逻辑,将Pawn自身实现的逻辑和上层控制逻辑分开
· 解耦:耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象,解耦就是用某种方法将两种体系分离开来处理
问题
Controller
· Controller继承自Actor(为了使用Actor的挂载组件、Tick等功能)
· AController
· Controller里只是保存了一个Pawn指针(一对一)
· Controller在逻辑上应该实现玩家逻辑
· Controller的Transform作用
虚幻引擎核心设计:MVC