- 将 ShrinkEventBus、ShrinkDataSaver 及其 EventBus 集成从 gitlink 转为仓库直接维护的完整 UPM 包,补齐运行时、编辑器工具、测试与文档 - 新增 Command 和 Network 的 App 集成组件,支持 ContextLoader 服务发布、可逆注销及 Network Loopback 生命周期管理 - 更新 Starter 与演示组合逻辑,缺失模块时可注册、已有兼容安装器时可覆盖,并补充宿主启动断言 - 升级内部包依赖与 Shared CodeGen 包定义,放宽 Integration.App 包的 Git 忽略规则 - 将独立服务器生成器改为基于已编译程序集的语义扫描,支持 partial、复杂泛型、命名冲突检测及模板 SHA-256 覆写保护 - 新增 Network 语义扫描、模板保护和 App 组件生命周期测试 - 新增真实 UPM 消费工程验证脚本,校验内部版本一致性、程序集加载及 EditMode 测试 - 重构当前架构文档并归档已完成的 Cordis 迁移与旧代码地图
3.9 KiB
3.9 KiB
架构
架构概览
- 这是一个以 Unity 包为边界的 SDK 单仓架构。
- 主要由三个可分发模块组成:
ShrinkEventBusShrinkDataSaverShrinkDataSaver.Integration.EventBus
- 每个模块都按
Runtime、Editor、Tests或CodeGen做职责分离。
核心分层
- 事件总线层
- 公开入口在
Assets/Modules/ShrinkEventBus/Runtime/EventBus.cs - 负责注册、触发、注销、调试记录和实例注册状态
- 公开入口在
- 事件元数据与执行层
Assets/Modules/ShrinkEventBus/Runtime/EventBase.csAssets/Modules/ShrinkEventBus/Runtime/ListenerList.csAssets/Modules/ShrinkEventBus/Runtime/EventHandlerInfo.csAssets/Modules/ShrinkEventBus/Runtime/EventPool.cs
- 编译织入层
Assets/Modules/ShrinkEventBus/CodeGen/Editor/EventBusILPostProcessor.cs- 负责给订阅者自动注入
AutoRegister与UnregisterInstance
- 存档核心层
Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.csAssets/Modules/ShrinkDataSaver/Runtime/ShrinkSettings.csAssets/Modules/ShrinkDataSaver/Runtime/SaveTypes.cs
- 存储与安全层
Assets/Modules/ShrinkDataSaver/Runtime/IStorageProvider.csAssets/Modules/ShrinkDataSaver/Runtime/LocalStorageProvider.csAssets/Modules/ShrinkDataSaver/Runtime/SaveEncryptor.csAssets/Modules/ShrinkDataSaver/Runtime/DataSerializer.cs
- 版本迁移层
Assets/Modules/ShrinkDataSaver/Runtime/MigrationChain.cs
- Unity 入口层
Assets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverBootstrap.csAssets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverSettings.cs
- 集成桥接层
Assets/Modules/ShrinkDataSaver.Integration.EventBus/DataSaverEventBusBridge.cs
主要数据流
EventBus 数据流
- 注册流:
[EventBusSubscriber]+[EventSubscribe]EventBusILPostProcessor在编译期织入- 运行时通过
EventBus.AutoRegister(this)完成注册
- 触发流:
EventBus.TriggerEvent或EventBus.TriggerEventAsync- 从
EventCache<TEvent>.List取监听列表 ListenerList返回已排序快照- 依优先级逐个执行 handler
DataSaver 数据流
- 保存流:
ShrinkSave.SaveSlotAsync- 序列化所有已注册模块
- 可选加密
- 经
IStorageProvider.WriteAsync落盘 - 触发保存完成或失败事件
- 加载流:
ShrinkSave.LoadSlotAsync- 从
IStorageProvider.ReadAsync读取 - 可选解密
- 必要时执行
MigrationChain.Apply - 分发给每个已注册模块反序列化
- 缓存
_loadedModuleData供查询接口使用
生命周期入口
EventBus通过静态构造与运行时初始化参与系统启动。ShrinkDataSaverBootstrap是MonoBehaviour入口,负责:- 初始化
ShrinkSettings - 初始化
ShrinkSave - 自动保存轮询
- 应用暂停与退出时落盘设置
- 初始化
DataSaverEventBusBridge在AfterAssembliesLoaded订阅 DataSaver 原生事件。
架构风格
- 偏“静态门面 + 小型基础设施”的工具库风格。
- 对业务方暴露的是简单静态 API,而不是依赖注入容器。
- 内部通过接口和 asmdef 边界做最小抽象,典型例子是
IStorageProvider。 - 编辑器功能与运行时彻底分离,避免运行时代码依赖 UnityEditor。
入口判断
- 真正的运行时入口不是某个
Main.cs,而是 Unity 生命周期钩子和静态类。 - 如果要阅读项目行为,优先从以下文件开始:
Assets/Modules/ShrinkEventBus/Runtime/EventBus.csAssets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverBootstrap.csAssets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.csAssets/Modules/ShrinkDataSaver.Integration.EventBus/DataSaverEventBusBridge.cs
结论
- 这套架构的重点是“低侵入接入 Unity 项目”,而不是重框架化。
- 真正的设计价值在于 asmdef 分层、编译织入、静态门面和模块化存储抽象的组合。