使用十六进制编辑资源

使用十六进制编辑资源

通常可以用 UAssetGUI 修改资源,但工具无法处理某些文件时,也可以尝试手动进行十六进制编辑。本指南以修改材质发光颜色为例,介绍两种查找和替换浮点数的方法。

获取原始值

使用 FModel 或 UModel 找到并导出目标资源。

在资源浏览器中找到目标资源

原文示例中,发光颜色的值为 0.0, 33.0, 55.0, 1.0,可以在 FModel 中查看。

在 FModel 中查看颜色值

导出的资源通常由 .uasset 与 .uexp 配对组成;本例中的值存储在 .uexp 中,需要编辑该文件。

方法一:按浮点数替换

用十六进制编辑器打开 .uexp。原例使用 Hex Editor Neo,通过 Ctrl+H 打开替换窗口;其他软件的快捷键可能不同。将类型设为 Float,输入原值与目标值。如果编辑器没有此功能,可使用下方的第二种方法。

在十六进制编辑器中设置浮点替换

点击 Replace All。操作成功时会显示提示窗口。

替换完成提示

替换后,使用 UnrealPak 将修改过的 .uexp 打包。

可在游戏内验证修改后的效果。

方法二:搜索十六进制字节

如果编辑器没有按浮点数替换的功能,可以先把原始数值转换成小端序十六进制字节。本例使用 0.0, 33.0, 55.0, 1.0。

将浮点数转换为小端序十六进制字节

将转换后的字节序列输入搜索面板。

搜索十六进制字节序列

本例中的组合是唯一的,因此只有一条结果。

找到的字节序列

再用目标值对应的字节替换。原例目标值为 55, 0, 0, 1,对应:

00 00 5c 42 00 00 00 00 00 00 00 00 00 00 80 3F

在本例中,55 表示发光强度;原文说明此值通常介于 0.0 和 1.0 之间。

替换目标字节

保存文件,再使用 UnrealPak 打包修改后的 .uexp。

找到多个匹配结果怎么办?

可以尝试同时搜索目标变量周围的一系列值,并核对相邻值是否按对应顺序出现,以便缩小范围。

原文来源:Dmgvol / UE_Modding:HexEditing.md。