虚幻引擎存档编辑器 uesave 教程:3 条命令把 .sav 存档转成 JSON 随意改
【免费下载链接】uesaveRust library and CLI to read and write Unreal Engine save files项目地址: https://gitcode.com/gh_mirrors/ue/uesave
uesave 是一个用 Rust 编写的免费开源虚幻引擎存档编辑器,专门读写 UE 游戏的存档文件(GVAS 格式)。它能将二进制 .sav 存档完整解析成人类可读的 JSON,让你用文本编辑器直接改数值,再回写成游戏能识别的存档文件。适合存档备份、调整进度与资源、以及摸清游戏内部的数据结构。
.sav 存档为什么打不开
先搞懂对象:你双击 .sav 看到一堆乱码不是文件坏了。UE 存档是一种叫 GVAS(Game Archive)的二进制格式,属性名、类型标签、长度前缀全部以字节流形式存储,"序列化"就是把结构化数据压成这种字节流的过程。
用十六进制编辑器硬改当然可以,但你得先懂格式细节,写错一个字节整个存档就废了。uesave 把序列化这层脏活接过去:读取时按属性逐项还原成 JSON,写出时再按原格式落回字节,你只在可读层操作。核心解析逻辑在 uesave/src/archive.rs,属性的序列化实现在 uesave/src/serialization.rs,排错时可以对照源码看。
三步装好 uesave 存档编辑工具
装完后你会得到一个uesave命令,Windows、macOS、Linux 上行为一致。
先确认系统里有 Rust 工具链(需要 1.60.0 及以上):
rustc --version然后从仓库安装:
cargo install --git https://gitcode.com/gh_mirrors/ue/uesave最后验证:
uesave --version有个容易踩的命名点:可执行包的源码目录叫 uesave_cli,但装出来的命令是uesave。跑uesave --help能看到全部四个子命令,其中三个是你日常会用到的。
三条命令覆盖全部工作流
to-json:把二进制存档导出为 JSONfrom-json:把 JSON 回写成二进制存档edit:一步完成"导出 → 打开编辑器 → 回写"
另有一个test-resave,后面排错时会用到。
UE 存档转 JSON:to-json 与 from-json 怎么配合
导出存档(输入输出默认走标准输入输出,也可以显式指定文件):
uesave to-json -i SaveGame.sav -o SaveGame.json得到的是一份缩进整齐的 JSON,字段名就是游戏内部属性名。改完数值后回写:
uesave from-json -i SaveGame.json -o NewSaveGame.sav注意回写时输出到新文件名,别直接覆盖原档。
想要最省事的方式,用edit一步到位:
uesave edit SaveGame.sav它会按$EDITOR环境变量指定的编辑器打开临时 JSON,你保存退出后自动回写原文件;如果内容没改动,它会提示 "File unchanged" 并跳过写入。
游戏存档修改教程:以深岩银河为例的完整实录
这一节用《深岩银河》(Deep Rock Galactic,官方明确测试过其存档)走一遍完整流程,节奏是"操作 → 验证 → 收尾"。仓库根目录附带了一个 drg-save-test.sav 示例存档,建议第一次先拿它练手,别直接动真存档。
操作:备份、导出、改数
先找到存档目录。Windows 在C:\Users\<用户名>\AppData\Local\FSD\Saved\SaveGames\,Linux 在~/.local/share/DeepRockGalactic/FSD/Saved/SaveGames/。
动手前复制一份原档,原则是:新存档验证可用之前,原档一个字节都不动:
cp SaveGame.sav SaveGame.bak.sav导出为 JSON:
uesave to-json -i SaveGame.sav -o SaveGame.json打开 JSON,找到想改的字段。深岩银河存档里常见的是信用点(Credits)和资源类数值。修改边界建议收紧一点:
- 数字、字符串、布尔值可以直接改
- 数组长度、对象层级保持原样,增删元素风险高
- 看不懂的字段原封不动
改完回写到新文件:
uesave from-json -i SaveGame.json -o SaveGame_modified.sav验证:回写前和加载后各查一次
回写前,你可以顺手确认 JSON 结构没有被动坏:用编辑器的折叠和搜索功能,重点扫一眼改动过的区域附近是否还有括号、逗号问题。
回写后,把新存档文件名改回原存档名(原档仍有 .bak 备份),启动游戏加载,核对信用点、资源等数值是否生效,同时确认游戏没有报存档错误。
收尾:替换原档并留后路
游戏确认能正常读档后,这套修改才算落地。备份文件先留着,过几天确认没有连锁问题再删。如果加载失败,直接用SaveGame.bak.sav回滚,再回来查"排错手册"。
排错手册:转换报错的常见修复
遇到报错先别怀疑自己,多数情况工具已经提示了原因。下面按出现频率列:
MapProperty / SetProperty 解析失败:存档里这类字段的内部结构缺少类型上下文,uesave 会先尝试猜测,猜错就会报解析错误。解决办法是用-t参数手动指定类型,例如:
uesave to-json -i SaveGame.sav -o SaveGame.json -t .UnlockedItemSkins.Skins=Guidedit和test-resave同样支持-t参数,格式都是字段路径=类型。
文件读不了或明显异常:确认 .sav 完整(大小正常、传输没被截断),并确认用的是最新版 uesave。
回写后游戏拒绝读档:最常见原因是 JSON 结构被改动——数组长度变了、字段被增删。值随便改,结构尽量不动。
改动大存档时容易出错的流程问题:JSON 可能很大,用支持折叠的代码编辑器,只展开要改的节点;改重要存档前先在一份无关紧要的存档上试同样的修改。
解析时有非致命告警:如果告警刷屏干扰阅读,加--no-warn静默。
想确认工具对某个存档是否完全可靠:跑一次回环测试,
uesave test-resave SaveGame.sav它会把存档重新序列化一遍并逐字节比对,输出 "Resave successful" 说明该存档可以完整往返,改动风险最低。
进阶用法:批量转换与 Rust 库扩展
批量转换不需要脚本语言,一个 shell 循环就够:
for f in *.sav; do uesave to-json -i "$f" -o "${f%.sav}.json"; doneuesave 本身是一个 crate(Rust 库),CLI 只是它的外壳。想在自己的程序里读存档字段,可以直接依赖这个库,uesave/examples/read-save/main.rs 演示了如何打开存档并读取"已游玩局数"字段;另一个示例 uesave/examples/space-rig-decorator/ 则展示了完整读写一份带复杂结构的存档。
仓库里还有一个浏览器版本:uesave_wasm/把核心库编译成 WebAssembly,web/目录下是 Svelte 前端,转换在浏览器里完成,适合不方便装 Rust 环境的场景。基于库 API 你还能自定义序列化规则、扩展支持的游戏类型,把它嵌进自己的工具链。
本文基于 uesave 0.7.1 编写,官方完整验证对象是《深岩银河》存档,兼容 UE4.26+ 与 UE5.0–5.2 的存档;换其他游戏前,建议先跑一次test-resave确认往返可靠再动手。
【免费下载链接】uesaveRust library and CLI to read and write Unreal Engine save files项目地址: https://gitcode.com/gh_mirrors/ue/uesave
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考