转储工具
C++ 头文件生成器
C++ 转储工具可根据 UE4 类和蓝图生成 C++ 头文件。
生成头文件的默认快捷键为 CTRL + H,可以在 Mods/Keybinds/Scripts/main.lua 中修改。
它为每个蓝图(包括动画蓝图和控件蓝图)生成一个 .hpp 文件,并将所有基类写入 <ProjectName>.hpp 或 <EngineModule>.hpp。文件开头先列出所有类,随后列出所有结构体。枚举单独存放在文件中,文件名与对应类相同,但末尾增加 _enums。
配置
-
DumpOffsetsAndSizes(bool)- 是否输出属性偏移和大小。
- 默认值:1。
-
KeepMemoryLayout(bool)- 是否使类和结构体的内存布局保持准确。
- 如果要在实际 C++ 项目中使用生成的头文件,必须设为 1。
- 设为 0 时,不生成用于填充的成员变量。
- 默认值:0。
警告:目前设为 1 仍没有实际作用,因为无论如何内存布局都不准确!
-
LoadAllAssetsBeforeGeneratingCXXHeaders(bool)- 是否在生成头文件前强制加载所有资源。
- 默认值:0。
警告:可能需要额外数 GB 内存,运行不稳定;转储后如果继续越过主菜单加载游戏,将导致游戏崩溃。
Unreal Header Tool(UHT)转储工具
生成兼容 Unreal Header Tool 的 C++ 头文件,用于创建游戏的镜像 .uproject 项目。关于这些头文件的使用方法,请参阅这篇指南。
生成头文件的默认快捷键为 CTRL + Numpad 9,可以在 Mods/Keybinds/Scripts/main.lua 中修改。
配置
-
IgnoreAllCoreEngineModules(bool)- 是否跳过生成引擎所属的包;对于修改过引擎的游戏尤其有用。
- 默认值:0。
-
IgnoreEngineAndCoreUObject(bool)- 是否跳过生成
Engine和CoreUObject包。 - 默认值:1。
- 是否跳过生成
-
MakeAllFunctionsBlueprintCallable(bool)- 是否强制为所有 UFUNCTION 宏添加
BlueprintCallable。 - 默认值:1。
警告:这会使生成的头文件出现一些错误,需要手动修复。
- 是否强制为所有 UFUNCTION 宏添加
-
MakeAllPropertyBlueprintsReadWrite(bool)- 是否强制为所有 UPROPERTY 宏添加
BlueprintReadWrite。 - 同时强制为所有 UPROPERTY 宏添加
meta=(AllowPrivateAccess=true)。 - 默认值:1。
- 是否强制为所有 UPROPERTY 宏添加
-
MakeEnumClassesBlueprintType(bool)- 当枚举的底层类型为隐式类型或 uint8 时,是否强制为其 UENUM 宏添加
BlueprintType。 - 默认值:1。
警告:这也会将原本隐式的底层类型强制设为 uint8。
- 当枚举的底层类型为隐式类型或 uint8 时,是否强制为其 UENUM 宏添加
-
MakeAllConfigsEngineConfig(bool)- 对于使用
DefaultConfig、GlobalUserConfig或ProjectUserConfig的所有 UCLASS 宏,是否强制设置Config = Engine。 - 默认值:1。
- 对于使用
对象转储工具
将所有已加载对象转储到 UE4SS_ObjectDump.txt 文件(可以开启强制加载全部资源)。
转储对象的默认快捷键为 CTRL + J,可以在 Mods/Keybinds/Scripts/main.lua 中修改。
输出示例:
[000002A70F57E5C0] Function /Game/UI/Art/WidgetParts/Basic_ButtonScalable2.Basic_ButtonScalable2_C:BndEvt__Button_0_K2Node_ComponentBoundEvent_0_OnButtonClickedEvent__DelegateSignature [n: 5343AA] [c: 000002A727993A00] [or: 000002A708466980]
[000002A70F57E4E0] Function /Game/UI/Art/WidgetParts/Basic_ButtonScalable2.Basic_ButtonScalable2_C:PreConstruct [n: 4057B] [c: 000002A727993A00] [or: 000002A708466980]
[000002A70F876600] BoolProperty /Game/UI/Art/WidgetParts/Basic_ButtonScalable2.Basic_ButtonScalable2_C:PreConstruct:IsDesignTime [o: 0] [n: 4D63DB] [c: 00007FF683722CC0] [owr: 000002A70F57E4E0]
输出中有多组方括号,每组含义不同。下表说明各字母标记的含义。第一组方括号中的值是对象或属性在内存中的存储地址。
| 标记 | 含义 | UE 成员变量 |
|---|---|---|
| n | 对象/属性的名称 | NamePrivate |
| c | 对象/属性/枚举值的类 | ClassPrivate |
| or | 对象的 Outer | OuterPrivate |
| o | 属性值在对象中的偏移 | Offset_Internal |
| owr | FField 的所有者,仅适用于 4.25+ | Owner |
| kp | FMapProperty 的键属性 | KeyProp |
| vp | FMapProperty 的值属性 | ValueProp |
| mc | 此 FClassProperty 引用的类 | MetaClass |
| df | 此 FDelegateProperty 引用的函数 | FunctionSignature |
| pc | 此 FObjectProperty/FFieldPathProperty 引用的类 | PropertyClass |
| ic | 此 FInterfaceProperty 引用的类 | InterfaceClass |
| ss | 此 FStructProperty 引用的结构体 | Struct |
| em | 此 FEnumProperty 引用的枚举 | Enum |
| fm | 此 FBoolProperty 引用的字段掩码 | FieldMask |
| bm | 此 FBoolProperty 引用的字节掩码 | ByteMask |
| v | 此枚举键对应的值 | 不适用 |
| sps | 此 UClass 的 SuperStruct | SuperStruct |
| ai | 此 FArrayProperty 存储的属性 | Inner |
| f | UFunction 的原生函数包装器;非原生函数则为 ProcessInternal | Func |
配置
LoadAllAssetsBeforeDumpingObjects(bool)- 是否在转储对象前强制加载全部资源。
- 默认值:0。
警告:可能需要额外数 GB 内存,运行不稳定;转储后如果继续越过主菜单加载游戏,将导致游戏崩溃。
.usmap 转储工具
为无版本属性生成 .usmap 映射文件。
转储映射的默认快捷键为 Ctrl + Numpad 6,可以在 Mods/Keybinds/Scripts/main.lua 中修改。
默认情况下,除了原生类型,转储还包含蓝图生成的类、结构体和枚举。可以取消 GUI 的 Dumpers 页签中的 Include Blueprint-generated types 复选框,或在 Lua 中调用 DumpUSMAP(false) 来禁用此行为。
感谢 OutTheShade 提供最初的实现。
.jmap 转储工具
生成 .jmap 反射转储(JSON 格式,由 trumank 定义)。
转储包含类、函数、结构体和枚举的完整反射数据(包括属性偏移、大小和标志)、类默认对象的属性值,以及近似的虚函数表布局。jmap CLI 可以将其转换为 .usmap 或 C++ 头文件,ue_binja 插件可以将其应用于 Binary Ninja 数据库。
默认转储快捷键为 Ctrl + Numpad 5,可以在 Mods/Keybinds/Scripts/main.lua 中修改。也可以从 GUI 的 Dumpers 页签触发,或调用 Lua 函数 DumpJMAP()。
默认情况下,除了原生对象,转储还包含蓝图生成的类、结构体和枚举(以及它们的 CDO)。可以取消 GUI 的 Dumpers 页签中的 Include Blueprint-generated types 复选框,或在 Lua 中调用 DumpJMAP(false) 来禁用此行为。
文件写入 UE4SS 工作目录,命名为 <GameName>-<EngineVersion>-<UE4SSCommitSHA>.jmap。
.umap 重建转储工具
将所有已加载 Actor 转储到 ue4ss_static_mesh_data.csv,以便在编辑器中生成 .umap。
要在编辑器中加载转储的 Actor 并重建 .umap,必须满足两个前提:
- 所有转储的 Actor(静态网格及其材质/纹理)都必须已在编辑器中重建。
- 从 Releases 页面下载
zMapGenBP.zip,并按照压缩包内 Readme 文件的说明操作。
转储映射的默认快捷键为 Ctrl + Numpad 7,可以在 Mods/Keybinds/Scripts/main.lua 中修改。
原文:docs/feature-overview/dumpers.md · 固定提交 560411f18512 · 来源与 MIT 许可