Unreal
- [🏛 Unreal Engine - UObject](#🏛 Unreal Engine - UObject)
-
- [🏷 定义](#🏷 定义)
- [🧩 类继承关系](#🧩 类继承关系)
- [⚙️ 关键特性](#⚙️ 关键特性)
- [📝 使用方法](#📝 使用方法)
-
- [1. 创建 UObject 对象](#1. 创建 UObject 对象)
- [2. 属性与函数绑定](#2. 属性与函数绑定)
- [📚 常见子类与用途](#📚 常见子类与用途)
- [📦 小结](#📦 小结)
🏛 Unreal Engine - UObject
🏷 定义
- UObject 是 Unreal Engine 中所有对象的基类。
- 提供 核心功能:内存管理、反射系统、序列化、垃圾回收。
- 所有游戏对象、组件、资源(如
AActor
, UComponent
, UMaterial
)都直接或间接继承自 UObject
。
🧩 类继承关系
复制代码
UObject
├── UActorComponent
├── UAssetUserData
├── UUserWidget
└── AActor
└── ... 其他 Actor 派生类
- UObject:基础对象类,支持 GC、序列化、反射。
- AActor:世界中的可放置对象。
- UActorComponent:Actor 的组件,可组合行为。
- UUserWidget:UI 基类,可在蓝图中可视化编辑。
⚙️ 关键特性
- 反射系统(Reflection)
- 支持
UCLASS()
, UPROPERTY()
, UFUNCTION()
宏。
- 可在运行时访问类信息、属性、函数。
- 蓝图和编辑器可以直接操作对象属性和函数。
- 垃圾回收(Garbage Collection, GC)
- 对象通过
NewObject<>()
创建,由 UE 自动管理生命周期。
- 不需要手动 delete。
- 支持 RootSet、标记引用对象防止被回收。
- 序列化(Serialization)
- 对象属性可以保存/加载。
- 支持标记如
SaveGame
, Transient
, Config
。
- 蓝图资产和游戏状态可以持久化。
- 生命周期管理
- 核心回调:
Constructor
:对象构造
PostInitProperties()
:初始化完成
BeginDestroy()
:开始销毁
FinishDestroy()
:销毁完成
- 支持动态创建、复制、重置。
- 蓝图支持
- 可作为蓝图基类创建资产。
- 反射系统支持在蓝图中访问对象属性和调用函数。
📝 使用方法
1. 创建 UObject 对象
cpp
复制代码
// 创建一个 UObject 派生类实例
UMyObject* MyObj = NewObject<UMyObject>();
// 设置属性
MyObj->Health = 100;
// 调用函数
MyObj->Initialize();
- 建议使用
NewObject<>()
或 ConstructObject<>()
,避免直接用 new
。
2. 属性与函数绑定
- 使用
UPROPERTY()
控制序列化和 GC
- 使用
UFUNCTION()
暴露函数给蓝图
cpp
复制代码
UCLASS()
class UMyObject : public UObject
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Stats")
int32 Health;
UFUNCTION(BlueprintCallable, Category="Actions")
void Initialize();
};
📚 常见子类与用途
类 |
用途 |
AActor |
世界中可放置对象 |
UActorComponent |
Actor 的组件行为 |
UUserWidget |
UI 界面基类 |
UMaterial |
材质资源 |
UTexture |
纹理资源 |
USoundBase |
声音资源 |
UGameInstance |
游戏实例生命周期管理 |
📦 小结
- UObject = UE 核心对象基类
- ✅ 提供 反射、序列化、GC、生命周期管理
- ✅ 所有游戏对象、组件、资源都继承自 UObject
- ✅ 可在蓝图和 C++ 中统一管理对象