Files
T
cneicy d6b1940982
Publish UPM package / publish (push) Successful in 2s
Publish NuGet packages / publish (push) Successful in 4m11s
chore: align SDK dependencies and document reusable capabilities
2026-09-29 10:14:44 +08:00

52 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ShrinkDataSaver.Integration.EventBus
把 ShrinkDataSaver 的设置、保存、加载、迁移和删除生命周期发布为 ShrinkEventBus 2.0 事件。
Godot 和普通 .NET 项目安装 `ShrinkSDK.DataSaver.Integration.EventBus`;可打包源码位于 `DotNet~`。
ContextLoader 通过 `ShrinkDataSaverEventBusComponent` 管理桥生命周期;独立宿主调用 `DataSaverEventBusBridge.Register()`,退出时调用 `Unregister()`。
事件均实现 `IShrinkEvent`:
- `SettingsChangedEvent`
- `SaveStartedEvent` / `SaveCompletedEvent` / `SaveFailedEvent`
- `LoadStartedEvent` / `LoadCompletedEvent` / `LoadFailedEvent`
- `MigrationCompletedEvent`
- `SlotDeletedEvent`
订阅只使用 2.0 特性:
```csharp
[ShrinkEventSubscriber(DefaultBus = "game")]
public sealed class SaveUiHandlers
{
[ShrinkSubscribe]
private void OnSaved(SaveCompletedEvent value)
{
Debug.Log($"slot {value.SlotIndex} saved");
}
[ShrinkSubscribe(Priority = ShrinkEventPriority.Low)]
private void OnLoadFailed(LoadFailedEvent value)
{
Debug.LogError(value.ErrorMessage);
}
}
using var binding = EventBus.Attach(new SaveUiHandlers());
```
桥接方向是 DataSaver -> EventBus,发布使用 `EventBus.Post(...)`。没有手工 Delegate 注册或旧 Trigger API。
`SettingsChangedEvent.Get<T>()` 内部使用 `Convert.ChangeType`,只应在设置值确实可转换时调用。
## 可复用能力
<!-- shrink:capabilities -->
Capability: 将存档、加载、迁移、删除和设置生命周期转为事件
Aliases: 存档事件 保存完成 加载结果
Limits: 事件只反馈存档行为;不会赋予订阅者写权限
Extension: 桥注册与撤回;类型化生命周期事件
Evidence: [DataSaverEventBusBridge](DataSaverEventBusBridge.cs)
<!-- /shrink:capabilities -->