Files
cneicy d74c2f08ca feat(packages): 内置 SDK 包并完善 ContextLoader 集成
- 将 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 迁移与旧代码地图
2026-08-18 18:06:34 +08:00

3.9 KiB

架构

架构概览

  • 这是一个以 Unity 包为边界的 SDK 单仓架构。
  • 主要由三个可分发模块组成:
    • ShrinkEventBus
    • ShrinkDataSaver
    • ShrinkDataSaver.Integration.EventBus
  • 每个模块都按 RuntimeEditorTestsCodeGen 做职责分离。

核心分层

  • 事件总线层
    • 公开入口在 Assets/Modules/ShrinkEventBus/Runtime/EventBus.cs
    • 负责注册、触发、注销、调试记录和实例注册状态
  • 事件元数据与执行层
    • Assets/Modules/ShrinkEventBus/Runtime/EventBase.cs
    • Assets/Modules/ShrinkEventBus/Runtime/ListenerList.cs
    • Assets/Modules/ShrinkEventBus/Runtime/EventHandlerInfo.cs
    • Assets/Modules/ShrinkEventBus/Runtime/EventPool.cs
  • 编译织入层
    • Assets/Modules/ShrinkEventBus/CodeGen/Editor/EventBusILPostProcessor.cs
    • 负责给订阅者自动注入 AutoRegisterUnregisterInstance
  • 存档核心层
    • Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.cs
    • Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSettings.cs
    • Assets/Modules/ShrinkDataSaver/Runtime/SaveTypes.cs
  • 存储与安全层
    • Assets/Modules/ShrinkDataSaver/Runtime/IStorageProvider.cs
    • Assets/Modules/ShrinkDataSaver/Runtime/LocalStorageProvider.cs
    • Assets/Modules/ShrinkDataSaver/Runtime/SaveEncryptor.cs
    • Assets/Modules/ShrinkDataSaver/Runtime/DataSerializer.cs
  • 版本迁移层
    • Assets/Modules/ShrinkDataSaver/Runtime/MigrationChain.cs
  • Unity 入口层
    • Assets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverBootstrap.cs
    • Assets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverSettings.cs
  • 集成桥接层
    • Assets/Modules/ShrinkDataSaver.Integration.EventBus/DataSaverEventBusBridge.cs

主要数据流

EventBus 数据流

  • 注册流:
    • [EventBusSubscriber] + [EventSubscribe]
    • EventBusILPostProcessor 在编译期织入
    • 运行时通过 EventBus.AutoRegister(this) 完成注册
  • 触发流:
    • EventBus.TriggerEventEventBus.TriggerEventAsync
    • EventCache<TEvent>.List 取监听列表
    • ListenerList 返回已排序快照
    • 依优先级逐个执行 handler

DataSaver 数据流

  • 保存流:
    • ShrinkSave.SaveSlotAsync
    • 序列化所有已注册模块
    • 可选加密
    • IStorageProvider.WriteAsync 落盘
    • 触发保存完成或失败事件
  • 加载流:
    • ShrinkSave.LoadSlotAsync
    • IStorageProvider.ReadAsync 读取
    • 可选解密
    • 必要时执行 MigrationChain.Apply
    • 分发给每个已注册模块反序列化
    • 缓存 _loadedModuleData 供查询接口使用

生命周期入口

  • EventBus 通过静态构造与运行时初始化参与系统启动。
  • ShrinkDataSaverBootstrapMonoBehaviour 入口,负责:
    • 初始化 ShrinkSettings
    • 初始化 ShrinkSave
    • 自动保存轮询
    • 应用暂停与退出时落盘设置
  • DataSaverEventBusBridgeAfterAssembliesLoaded 订阅 DataSaver 原生事件。

架构风格

  • 偏“静态门面 + 小型基础设施”的工具库风格。
  • 对业务方暴露的是简单静态 API,而不是依赖注入容器。
  • 内部通过接口和 asmdef 边界做最小抽象,典型例子是 IStorageProvider
  • 编辑器功能与运行时彻底分离,避免运行时代码依赖 UnityEditor。

入口判断

  • 真正的运行时入口不是某个 Main.cs,而是 Unity 生命周期钩子和静态类。
  • 如果要阅读项目行为,优先从以下文件开始:
    • Assets/Modules/ShrinkEventBus/Runtime/EventBus.cs
    • Assets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverBootstrap.cs
    • Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.cs
    • Assets/Modules/ShrinkDataSaver.Integration.EventBus/DataSaverEventBusBridge.cs

结论

  • 这套架构的重点是“低侵入接入 Unity 项目”,而不是重框架化。
  • 真正的设计价值在于 asmdef 分层、编译织入、静态门面和模块化存储抽象的组合。