用途:为 Bevy 0.19 游戏设计可跨 ECS、内容与代码重构存活的存档系统,覆盖大型世界的快照/稀疏增量/压缩/恢复,以及原生与浏览器统一的异步存档服务契约。核心原则是:存档文件是长期产品 API,应序列化显式、带版本的数据模型,再与实时 ECS 互相转换;运行时 Entity、密集调色板索引、查询顺序、Rust 枚举判别值和反射组件布局都不是稳定持久化身份。
主要能力:定义稳定的 SaveId 与 Save DTO(如 SaveV3、ActorV3),用 serde 序列化;在信封中封装 magic、格式版本、schema/内容版本、载荷长度、编解码/压缩标识和校验和(校验和只检错,不防篡改,需要信任时用认证或签名);迁移写成 V1→V2→V3 的纯函数并保留各版本黄金夹具,测试损坏、截断、重复 ID、未知 ID 和未来版本文件。
使用方式:加载采用两遍法——校验 ID 唯一性与尺寸/数量限制,分配对象并建立 SaveId→Entity 映射,第二遍解析关系,按策略拒绝或保留未知内容,最后重建缓存、句柄、物理、任务与表现。加载时不得一边解码一边部分修改活动世界,应载入暂存、校验后再提交或替换。原生写入在目标目录用临时文件,flush/sync 后原子替换或重命名,保留校验过的备份或双槽代际,阻塞 I/O 放在 IoTaskPool 并把结果送回主世界。浏览器用 IndexedDB 存游戏存档与二进制块,小型偏好可放 local storage,需处理异步完成、配额、驱逐、隐私模式、标签页竞争、导入导出和页面终止,只有平台提交确认后才显示“保存完成”。
限制与边界:DynamicWorldBuilder 和 bevy_world_serialization 可带组件/资源过滤提取反射实体与资源,适合授权世界资产、编辑器工具、受控快照和短期内部格式,但不会自动提供稳定游戏 ID、schema 迁移、损坏恢复、事务存储或跨组件重构兼容;持久玩家存档应使用显式 DTO。Bevy 0.19 的 SettingsPlugin 面向用户设置、使用原生/local-storage 后端,不是通用战役/世界存档 schema。资料未提供具体依赖版本、API 签名与完整示例代码。