feat: update Godot integration and coordinated package dependencies
This commit is contained in:
11 files changed
+525
-49
No files matched your search
@@ -19,6 +19,7 @@ Godot 和普通 .NET 项目安装 `ShrinkSDK.DataSaver`;可打包源码位于
|
||||
| ⚙️ **Settings 系统** | 独立于存档的键值对设置,防抖写入,本地持久化 |
|
||||
| 🧷 **最近游玩槽位** | 自动记录最近一次成功进入的槽位,可用于“继续游戏” |
|
||||
| 🛠️ **双副本备份** | 主文件原子替换,自动保留 `.bak1` / `.bak2` 双副本轮换 |
|
||||
| 📦 **可注入存储** | 宿主可传入自定义 `IStorageProvider`,或选择 `RenameOnly` 提交策略 |
|
||||
| ☁️ **云存档兼容** | 每槽单文件 `.sav`,模块级 `EnableCloudSync` 开关 |
|
||||
| 🔗 **EventBus 集成** | 可选接入 ShrinkEventBus,所有事件自动桥接到事件总线 |
|
||||
| 🖥️ **Editor 工具** | 中文可视化调试窗口,实时查看/操作设置与存档 |
|
||||
@@ -75,6 +76,16 @@ Bootstrap 会自动 `DontDestroyOnLoad`,并在应用退出 / 移动端切后
|
||||
- 如果项目接入了 `ShrinkApp`,则可由宿主统一调用 `ShrinkDataSaverRuntime.Initialize(...)`
|
||||
- 宿主已接管时,旧 bootstrap 会自动幂等退出,不重复初始化
|
||||
|
||||
Godot 或其他 .NET 8 宿主可以注入自己的存储实现,并显式提供覆盖重命名操作。共享 netstandard2.1 库不绑定平台原生 API;缺少该操作时 `RenameOnly` 构造会失败。Godot 也可直接使用 `ShrinkGodotStorage.CreateRenameOnly(rootPath)`:
|
||||
|
||||
```csharp
|
||||
var storage = new LocalStorageProvider(rootPath, LocalStorageCommitStrategy.RenameOnly,
|
||||
(source, destination) => File.Move(source, destination, overwrite: true));
|
||||
ShrinkDataSaverPlatform.Initialize(storage, rootPath);
|
||||
```
|
||||
|
||||
`ShrinkDataSaverRuntimeConfig.Storage`(Unity 与 .NET 两套运行时配置均提供)和 `ShrinkDataSaverAppModuleConfig` 也支持传入自定义存储。`RenameOnly` 适合不支持原子替换的沙箱文件系统;它仍保留 `.bak1` / `.bak2`,并会在读取或下一次写入前恢复中断的提交。
|
||||
|
||||
### 第三步:注册存档模块
|
||||
|
||||
```csharp
|
||||
@@ -529,7 +540,7 @@ await ShrinkSave.LoadSlotAsync(slotIndex, key);
|
||||
|
||||
- **模块注册顺序无关**:`SaveSlotAsync` 序列化所有已注册模块,`LoadSlotAsync` 分发到对应模块,缺失的模块会跳过但不会导致加载失败。
|
||||
- **宿主接管兼容**:如果项目接入了 `ShrinkApp`,推荐通过 `ShrinkDataSaver.Integration.App` 让宿主统一初始化,而不是继续依赖场景 bootstrap。
|
||||
- **写入原子性**:`LocalStorageProvider` 先异步写入 `.tmp` 临时文件,再通过原子替换提交主文件,并自动轮换 `.bak1` / `.bak2` 两份备份。
|
||||
- **写入原子性**:`LocalStorageProvider` 先异步写入 `.tmp` 临时文件,再按 `FileReplace` 或 `RenameOnly` 策略提交主文件,并自动轮换 `.bak1` / `.bak2` 两份备份。
|
||||
- **读取恢复**:`ShrinkSave` 与 `ShrinkSettings` 读取主文件失败时,会自动回退到 `.bak1`、`.bak2`,并在成功后修复主文件。
|
||||
- **Settings 防抖**:`Set()` 调用后不立刻写磁盘,在 300ms(可配置)内连续调用只触发一次写入。退出时强制跳过防抖直接写入。
|
||||
- **加密密钥管理**:框架不存储密钥。密钥丢失则对应存档无法解密,建议在 UI 层给玩家明确提示。
|
||||
|
||||
Reference in new issue
Block a user