这其实是 Unreal Engine 的命名规范(Coding Standard),背后有很明确的设计逻辑。
🧩 一、前缀的含义
在 Unreal Engine 的类型系统中:
| 前缀 | 类型 | 说明 |
|---|---|---|
| U | UObject 派生类 |
所有继承自 UObject 的类都以 U 开头 |
| A | AActor 派生类 |
所有继承自 AActor 的类都以 A 开头 |
| F | 普通结构体(struct) |
不具备反射(Reflection)能力 |
| E | 枚举(enum) |
一般写成 EWeaponType 这样 |
| I | 接口(interface) |
如 IInteractable |
| T | 模板类(template) |
如 TArray, TMap |
🧠 二、为什么要区分 A / U
1. AActor 是一种特殊的 UObject
-
AActor其实继承自UObject→ 所以所有AActor也都是UObject。 -
但
AActor能 放到关卡(World)里 ,能 被实例化为游戏世界中的对象,所以引擎需要区分它。
2. 命名区分可以帮助编译器和开发者快速识别类型
比如:
ACharacter* MyCharacter; // 明确知道是放在世界里的对象 UUserWidget* MyUI; // 明确知道是UI资源类,不会在世界中出现
这样一眼就能看出:
-
A= Actor(可放入关卡) -
U= UObject(一般数据、资源、蓝图类)
🏗️ 三、类的层次关系
简单结构图如下:

-
所有东西最终都来自
UObject -
但只有
AActor及其子类能放进场景中(有 Transform、生命周期、Tick) -

✅ 举例总结
| 类名 | 前缀 | 用途 | 可否放入关卡 |
|---|---|---|---|
ACharacter |
A | 玩家角色类 | ✅ |
AGameModeBase |
A | 游戏模式控制类 | ✅(仅服务器持有) |
UUserWidget |
U | UI 界面 | ❌ |
UAnimInstance |
U | 动画蓝图逻辑类 | ❌ |
🔍 简短记忆法
"A 代表在场景里(Actor),U 代表在内存里(UObject)。"