# 📦 DataStorage 数据存储模块 ## ✨ 简介 该模块是一个基于 Unity + Easy Save 的本地数据存储系统,具备: - ✅ 本地缓存机制(避免频繁磁盘 IO) - ✅ 自动保存机制(按时间间隔或调用次数) - ✅ 云同步支持(支持上传 JSON,或导入云端数据) - ✅ 数据版本控制 - ✅ 类型安全的 `DataStorage` 封装 - ✅ 可调试的 GM 工具接口 ------ ## 📁 使用说明 ### 🔹 1. 定义数据键 在模块初始化之前,使用 `DataKeyDic.Register` 注册数据键名(通常在 `DataStorage` 构造时自动完成): ```c# var playerName = new DataStorage("PlayerName", "Guest"); playerName.Value = "Pius123"; ``` 或使用保存回调监听值变化: ```c# var coins = new DataStorage("CoinAmount", 0, (oldVal, newVal) => { Debug.Log($"金币变化:{oldVal} -> {newVal}"); }); ``` ### 🔹 2. 保存和读取数据 ```c# coins.Value = 100; // 保存数据(自动缓存 + 标记待保存) var coinAmount = coins.Value; // 从缓存读取(或回退至本地/云端) coins.Save(); // 强制保存(即使值没变) ``` 也可直接使用底层 API 操作(不建议): ```c# DataManager.Instance.SaveData("Level", 5); int level = DataManager.Instance.LoadData("Level", 1); ``` ### 🔹 3. 自动保存逻辑 模块会在以下时机自动保存数据到磁盘(使用 Easy Save): - ⏱ 每隔 15 秒(可配置) - 🔁 累积 `SaveData` 达到 20 次(可配置) - 🚫 App 暂停、退出时 - 📡 数据版本每增加两次触发一次 `_saveCallback`(用于云上传) ------ ## 🌐 云同步支持 ### ✅ 导出 JSON 上传云端 ```c# DataManager.Instance.AddSaveCallback((json, version, onQuit) => { // 上传 json 到云端,携带版本 version }); ``` 每次本地数据保存时(根据频率控制)会自动回调此方法。 ### ✅ 从云端导入数据 ```c# DataManager.Instance.ImportFromJson(jsonFromServer, versionFromServer); ``` - 若云端版本 > 本地版本:自动覆盖并保存到本地 - 若云端版本 < 本地版本:会自动触发 `_saveCallback` 上传本地数据覆盖云端 ------ ## 🔧 GM 调试接口(可选) 调用 `DataManager.Instance.Init()` 可注册 GM 工具按钮: - 🧹 清空所有数据 - 🗂 打印所有缓存键值对 ------ ## 🧠 数据结构概览 | 类名 | 说明 | | ---------------------------- | ---------------------------------------------- | | `DataManager` | 核心数据存储与调度管理(自动保存、版本、缓存) | | `DataStorage` | 泛型数据封装,提供属性式访问与变更通知 | | `DataKeyDic` / `DataKeyBase` | 注册键名与云同步标记支持 | | `ES3` | 第三方 Easy Save 工具(需另行导入) | ------ ## 📝 配置项 | 名称 | 默认值 | 说明 | | ------------------------- | ------ | -------------------- | | `InitialAutoSaveInterval` | `15s` | 自动保存时间间隔 | | `SaveThreshold` | `20次` | 自动保存调用次数阈值 | | `DataVersion` | `1` | 数据版本号,内部递增 | ------ ## 🔍 调试建议 - 使用 `DebugAllKeys()` 打印所有持久化键值 - 使用 `DebugCache()` 打印当前缓存数据 - 检查 `Log.Info/Error` 输出(默认已集成日志标记) ------ ## 📦 依赖项 - **Easy Save 3**:第三方持久化框架 - **Newtonsoft.Json**:JSON 序列化与反序列化 - **自定义框架组件**(如 `SingletonMonoBehaviour`、`Log`、`CommonUtils`、`GMTool` 等) ------ ## 📌 注意事项 - 云同步仅同步标记为 `CloudSave = true` 的键 - `DataStorage` 会自动触发注册,但手动操作建议提前注册 - 非线程安全,不建议多线程并发调用 - 建议在游戏入口或登录成功后初始化模块并导入云数据