42 lines
1.4 KiB
Markdown
42 lines
1.4 KiB
Markdown
# 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`,只应在设置值确实可转换时调用。
|