存档系统
MCE 使用基于 JSON 的存档系统,支持多栏位存档、版本控制和可扩展性。存档系统持久化玩家的完整游戏状态——队伍、物品栏、位置、徽章、任务进度和游戏变量。
架构
存档系统由多个组件组成:
| 组件 | 用途 |
|---|---|
SavegameManager | 协调存档/读档操作 |
SavableObject | 任何需要持久化数据的对象 的基类 |
MCESavesSerializer | 处理 JSON 序列化和反序列化 |
GameVariables | 全局变量存储(布尔值、整数、字符串) |
GameVariable | 单个变量引用 |
GameVariableHolder | 游戏变量的 MonoBehaviour 包装器 |
SavegameInstaller | 存档系统的 Zenject 安装器 |
SavableGlobalGameData
核心存档数据容器是 SavableGlobalGameData(GlobalGameData GameObject 上的组件)。它存储:
| 数据 | 描述 |
|---|---|
| 玩家位置 | 当前场景、地块坐标、面朝方向 |
| 怪兽队伍 | 队伍中所有怪兽的完整状态(物种、等级、个体值、努力值、性格、招式、PP、HP、状态、亲密度等) |
| PC 存储 | 盒子中的怪兽 |
| 背包 | 所有道具和数量 |
| 金钱 | 玩家的货币 |
| 徽章 | 已获得的道馆徽章 |
| 怪兽图鉴 | 每个物种的已见/已捕获追踪 |
| 游戏变量 | 所有 GameVariable 值(由 CommandGraph 使用) |
| 任务进度 | 活跃任务、已完成目标、已领取奖励 |
| 游戏时间 | 总游戏时间 |
存档栏位
MCE 支持多个存档栏位。默认配置提供 3 个栏位,但可配置。
保存
// 通过 SDK(所有版本)
engine.SaveSystem.Save(slotIndex); // 0、1 或 2
// 或直接通过 SavegameManager(Source 版本)
savegameManager.Save(slotIndex);
读取
// 通过 SDK(所有版本)
engine.SaveSystem.Load(slotIndex);
// 先检查栏位是否有数据
if (engine.SaveSystem.HasSaveData(slotIndex))
{
engine.SaveSystem.Load(slotIndex);
}
删除
engine.SaveSystem.DeleteSave(slotIndex);
存档文件位置
存档文件使用 Unity 的 Application.persistentDataPath 存储:
| 平台 | 路径 |
|---|---|
| Windows | %USERPROFILE%/AppData/LocalLow/<CompanyName>/<ProductName>/ |
| macOS | ~/Library/Application Support/<CompanyName>/<ProductName>/ |
| Linux | ~/.config/unity3d/<CompanyName>/<ProductName>/ |
| Android | 内部存储(应用私有) |
| iOS | 应用沙箱 |
每个栏位保存为单独的 JSON 文件:save_0.json、save_1.json、save_2.json。