用途
本技能为 Godot 引擎中的存档/读档系统提供专家级实现蓝图,面向需要持久化玩家进度、设置、物品栏、任务状态、经济数据等内容的游戏项目。它强调在序列化格式选择、版本管理、数据校验与安全边界上的工程实践,而非基础教程。
主要能力
- 序列化格式决策:根据需求选择 JSON(人类可读、中小型进度)、二进制 store_var(类型保真、较大数据块)、ResourceSaver/.tres/.res(类型化资源树与检视器模式)或 PERSIST 分组自动收集(大量场景节点)。
- 版本与迁移:每个存档块必须包含 version 字段;当版本落后于构建时,通过 save_migration_manager.gd 执行迁移后再加载。
- 备份与原子写入:覆盖前用 DirAccess.copy_absolute 复制为 .bak;写入临时文件后重命名,或先备份再写入,并校验打开错误。
- 完整性校验:可选使用 FileAccess.get_sha256 比对,不匹配时回退到备份。
- 加密路径:对敏感字段使用 FileAccess.open_encrypted_with_pass(),密码来自安全存储或用户密钥,绝不硬编码。
- 安全信任边界:对玩家 user:// 存档、创意工坊模组、下载文件,store_var/get_var 的 allow_objects 必须为 false,防止远程代码执行;仅对完全可信的本地工具或离线调试夹具才考虑 true,且需记录原因,绝不作为默认发布。
使用方式
技能提供若干强制脚本:save_load_patterns.gd(JSON/二进制/PERSIST 收集模式,默认 store_var(..., false))、save_migration_manager.gd(版本迁移)、save_system_encryption.gd(加密槽位)、save_integrity_validator.gd(滚动 .bak 与 SHA-256 校验)。编写 SaveManager 代码前必须先阅读所选格式对应的脚本;JSON/PERSIST 走查、二进制示例与加密路径的深入内容位于 references/save-patterns-deep.md,按需加载。黄金路径为:版本字段 → 迁移 → 备份 → 原子写入。路径只用 user://,设置可单独用 ConfigFile(如 user://settings.cfg)与运行进度分离。
适用场景
玩家进度、设置、物品栏堆叠与装备字典、任务标记与阶段 ID、货币钱包与商店解锁等需要跨会话持久化的数据。多人模式下本地存档模式可演变为主机权威状态同步,但绝不可信任客户端编辑的 JSON。
限制与注意事项
- JSON 无法忠实往返 Vector3,需存储 {x,y,z} 分量;需要严格类型保留时应使用 var_to_bytes() 或二进制格式。
- 不要用 JSON 存放大体积二进制数据(如 10MB 纹理的 Base64),应使用二进制 store_var() 或独立资源文件。
- 加载数据必须校验:使用 data.get("field", default_value) 并检查数值范围,防止崩溃。
- 不要在遍历字典键时修改该字典,需先 data.duplicate()。
- 不要依赖 get_instance_id() 做跨会话标识,应生成持久 String UUID。
- 加载 Resource 统计块时记得 duplicate(true),否则多个敌人共享同一生命池。
- 大场景不要在主线程用 ResourceLoader.load(),应使用 load_threaded_request() 后台加载。
- 不要将 set_meta 内部元数据留在持久字典中,序列化前清理。
- 本技能依赖 godot-project-foundations、godot-gdscript-mastery、godot-autoload-architecture 等前置技能,并与资源数据模式、场景管理、信号架构、UI 容器、物品栏、任务、经济等技能互补。