UE4 数据从底到顶类层级分解
ABSTRACT
个人学习笔记。自底向上拆解 UE4 的对象体系:UObject 反射基石与命名前缀约定、UBT/UHT 构建工具、Actor-Component 组合模型、Level/World 的组织与加载,最终给出
Object → Actor+Component → Level → World → WorldContext → GameInstance → Engine的完整组成链。
核心要点
- UObject 是「万物之源」:反射 + 自动内存管理/对象回收,让 UE4 的 C++ 用起来更像带自动管理的高级语言。
- 命名前缀约定(UHT 强制):模板类 T(TArray/TMap)、UObject 派生 U、Actor 派生 A、SWidget 派生 S、接口 I、枚举 E、bool 加 b、其余多数 F(FString/FName);编辑器与 C# 中类型名去前缀显示。
- 构建双工具:UBT 编译各模块并处理依赖(Target.cs/Build.cs 服务于它);UHT 解析 UCLASS 等宏与
*.generated.h,生成反射代码。 - Actor 自身没有 Transform:位置信息来自内部 RootComponent;Input 事件也转发给内部 UInputComponent——Actor 只是容器,提供创建销毁、网络复制、时间触发等基础逻辑。
- Component 嵌套规则:ActorComponent 不可嵌套,SceneComponent 才提供嵌套;Actor 的父子关系也通过 Component 建立(参考了 Unity 的组件化思路)。
- ChildActorComponent 是 Actor 间组合的胶水:蓝图里静态摆放时不真正创建子 Actor,Component 实例化时才创建,因此 Details 面板初始不可编辑属性(4.14 后 Child Actor Templates 改善)。
- AWorldSettings 名不副实:实际与 Level 绑定,只有 PersistentLevel 的 WorldSettings 全局生效;光照质量类配置则可按 Level 单独起效。
- Level 是 Actor 的容器,不鼓励复杂逻辑(ALevelScriptActor 隐藏 Components 列表即信号);GameMode/Controller 才是逻辑控制类。
- World 组织:Persistent Level + 若干 SubLevel,或用 World Composition 组合摆放;World 不直接管其他 Level 的 Actor,经 Level 间接管理以控制加载卸载。
- 完整组成链:Object → Actor+Component → Level → World → WorldContext → GameInstance → Engine;游戏级全局逻辑写在 GameInstance 派生类中。
关键实体与概念
UObject、UHT、UBT、命名前缀约定、Actor、ActorComponent、SceneComponent、ChildActorComponent、AWorldSettings、Persistent Level、SubLevel、World Composition、GameInstance
关联概念
来源回溯
- 原始文件:
raw/gamedev/ue4-数据从底到顶类层级分解.md(evernote/FW-游戏3研发技术 导入)
时效性评估
- 仍有效:对象组成链、命名约定、Actor-Component 模型在 UE4/UE5 保持一致,是理解引擎源码与蓝图的骨架。
- 已过时:World Composition 在 UE5 已被 World Partition 取代(流式加载的新方案);UBT/UHT 细节随版本演进,概念不变。