SuperAPI AI 工具集

godot-save-load-systems

编程与开发

查看项目

更新于 10-15 18:28

技能介绍

用途

该技能面向 Godot 引擎的存档与读档系统实现,提供专家级蓝图。它覆盖玩家进度、设置、游戏状态持久化以及错误恢复,适用于实现存档系统或任何数据持久化需求的场景。关键词包括 save、load、JSON、FileAccess、user://、serialization、version migration、PERSIST group。

主要能力

技能围绕多种持久化形态给出决策指引:

  • 人类可读、中小规模进度:JSON + version 字段。
  • 类型保真的 Variant 或较大数据块:二进制 store_var,且 allow_objects=false。
  • 类型化 Resource 树或检查器 schema:ResourceSaver / .tres/.res。
  • 大量场景节点自动收集:PERSIST 分组配合 save()/load()。
  • schema 演进:先迁移再加载。
  • 防篡改或敏感字段:加密 FileAccess。

技能附带四个强制脚本:save_load_patterns.gd(JSON/二进制/PERSIST 收集模式,默认 store_var(..., false))、save_migration_manager.gd(当存档 version 落后于构建时使用)、save_system_encryption.gd(加密槽位,密码来自安全存储或用户密钥,绝不硬编码)、save_integrity_validator.gd(滚动 .bak 加 SHA-256 校验,不匹配时回退备份)。

使用方式

技能给出黄金路径:每个存档块带 version 字段;版本不同时通过迁移管理器迁移;覆盖前先备份现有文件(DirAccess.copy_absolute 到 .bak);写入临时文件后重命名,或先备份再写入,并校验打开错误;可选做完整性校验(FileAccess.get_sha256 比较,不匹配回退备份);路径只用 user://,绝不用绝对系统路径;仅在菜单、检查点、关卡完成时保存,绝不在每帧物理更新中保存。设置可单独使用 ConfigFile,与运行进度 JSON/二进制分开。

技能强调 allow_objects 信任边界:默认始终 store_var(data, false) / get_var(false)。玩家 user:// 存档、创意工坊模组、下载内容必须为 false,否则存在远程代码执行风险;仅在自己控制的离线调试夹具等可信本地场景下才可考虑 true,且需记录原因、绝不作为默认发布。加密路径同样使用 false,除非载荷明确为可信本地且用户不可编辑。

适用场景

适用于 Godot 项目中实现存档/读档、玩家进度持久化、设置保存、游戏状态持久化、版本迁移、加密存档、完整性校验与错误恢复。技能还列出相关技能:前置包括 godot-project-foundations、godot-gdscript-mastery、godot-autoload-architecture;互补包括 godot-resource-data-patterns、godot-scene-management、godot-signal-architecture、godot-ui-containers、godot-inventory-system、godot-quest-system、godot-economy-system;下游消费者包括 godot-adapt-single-to-multiplayer、godot-monte-carlo-balancer、godot-multiplayer-networking;主路由为 godot-master。

限制

技能明确列出多项禁止事项:绝不在没有 version 字段的情况下保存;绝不使用绝对 OS 路径;绝不直接保存节点引用;绝不忘记关闭 FileAccess 句柄;绝不用 JSON 存储超大二进制数据;绝不信任未校验的加载数据;绝不在高频物理或动画更新中触发保存;绝不在遍历字典键时修改该字典;绝不在未加密 JSON 中存储原始密码或敏感凭据;绝不在主线程用 ResourceLoader.load() 加载超大场景;绝不依赖 get_instance_id() 做跨会话标识;绝不忘记对加载的 Resource 统计块调用 duplicate(true);绝不在不可信数据上使用 store_var/get_var 的 allow_objects 标志;绝不用 JSON 存储需要严格类型保留的数据;绝不把内部元数据(set_meta)留在持久化字典中。