分类:虚幻 5
学习路径:由浅入深,按顺序阅读效果最好(共 100 篇)
-
1. UE5 源码目录地图:Runtime/Programs/Developer 各层放什么
拿到 UE5 源码仓库后先建立整体坐标系:Engine/Source 各层的职责边界、模块的物理形态,以及"找代码先找模块"的检索套路。
-
2. UBT 构建流程解析:.Target.cs/.Build.cs 如何生成编译命令
拆解 UnrealBuildTool 从 .Target.cs 到 cl/link 命令行的完整推导链,搞懂模块依赖和编译参数到底从哪来。
-
3. UHT 与 .generated.h:反射代码生成的输入输出
看懂 .generated.h 里 GENERATED_BODY 宏的展开结果,理解 UHT 把头文件翻译成注册代码的完整流水线。
-
4. UE 宏体系:UCLASS/UPROPERTY/UFUNCTION 的语义参数全集
高频说明符逐条过:每个说明符落到哪个 flag 位、哪个系统消费它,以及说明符冲突时的实际行为。
-
5. 委托系统源码:DECLARE_DELEGATE 到 TBaseDelegate 的实现
单播/多播/动态委托的类层次、绑定时的内存分配、以及动态委托为什么必须配 UFUNCTION。
-
6. UE 智能指针家族:TSharedPtr/TSharedRef/TWeakPtr 与 TObjectPtr
分清 UE 两套指针系统的管辖边界:引用计数管非 UObject,GC 管 UObject;TObjectPtr 在 5.x 里改变了什么。
-
7. UE 容器与 allocator:TArray/TMap 的内存行为
TArray 的 Slack 增长策略、TMap 的稀疏数组+哈希桶结构,以及 UE 为什么不用 STL。
-
8. TaskGraph 与并行:NamedThread/AnyThread 的任务调度
TaskGraph 的前置依赖调度模型、NamedThread 的固定角色分工,以及引擎内并发编程的正确姿势。
-
9. 日志与断言:UE_LOG/check/ensure 的实现
日志分类的编译期裁剪机制、check/ensure/verify 三档断言的级别取舍,以及 Shipping 包里它们各自剩下什么。
-
10. 插件与模块加载:FModuleManager 的 LoadModule 流程
从 .uplugin 描述符到 DLL 加载的完整流程,StartupModule 的执行时机,以及热重载为什么有时失灵。
-
-
12. UObject 生命周期:从 NewObject 到 ConditionalBeginDestroy
把 UObject 从出生到销毁的每个阶段拆开来,讲清各阶段允许做什么、不允许做什么。
-
13. CDO 与属性初始化:ClassDefaultObject 到底在干什么
讲清 ClassDefaultObject 的创建时机、复制机制,以及为什么改 CDO 能影响所有实例。
-
14. FName 与字符串池:为什么 UE 的名字比较是 O(1)
FName 不是字符串而是索引,讲清 NameTable 的全局唯一化机制和它换来的比较速度。
-
15. 序列化机制:FArchive 与 UPROPERTY 的存取框架
讲清 UE 序列化系统的分层设计,以及 SaveGame 和资产加载为什么共用同一套框架。
-
16. 弱引用三兄弟:TWeakObjectPtr 的过期判定原理
讲清 TWeakObjectPtr/FWeakObjectPtr 的 index+serial number 机制,以及为什么不需要析构回调。
-
-
-
-
20. GameMode/PlayerController/Pawn 初始化链路:时序源码走读
从 UWorld::InitWorld 到 Possess,把 GameFramework 三件套的诞生顺序和每一棒的源码位置钉死。