Skip to content

Reactive(响应式联动)总览

程序集RocPlay.Extensions.Reactive
源码根目录Assets/RocPlay/Extensions/Reactive/
依赖:仅引用主程序集 RocPlayRocPlay.Core 中的 RocLog 等)。

本扩展是一套轻量、无外部 Rx 依赖的「可联动数据流」:谁产出变化IRocLinkable<T>)、谁消费变化IRocLinker<T>Link(Action<T>))、怎么结束监听IDisposable.Dispose)。细节按下面 最小心智模型 把握即可,再按需下钻分册。


最小心智模型

  1. 先定「状态从哪来」:多数情况用 RocLinkableProperty<T> 包一层 TValue 变了就沿链路 OnNext。相等值(EqualityComparer<T>.Default不推,避免空转。
  2. 再定「谁跟着变」property.Link(v => …)property.LinkTo(this, v => …)。前者你要自己 Dispose;后者把句柄登记在 owner 的 GameObject 上,owner 销毁时自动退订(见 Unity)。
  3. 链式只是套壳When / As / CombineLatest 返回的仍是 IRocLinkable<…>,本质还是 「上游 Link 下游 linker」;最后一环通常 Link(Action) 或手写 IRocLinker
  4. RocEventBus 的分工EventBus 适合 离散、一对多、跨模块广播Linkable 适合 同一状态、多观察点、连续同步(设置项、VM 字段、两处 UI 绑同一数)。不必二选一,可并存。
  5. 线程与 Unity谁在什么线程改 ValueOnNext 就在什么线程跑;回调里若碰 UnityEngine.Object,请在业务层切主线程(见 主线程检查与调度(RocMainThreadDispatcher))。

何时使用

适合不太适合
ViewModel 式字段、设置项、简单状态机需要 多处 UI 或非 UI 同步需要完整 冷/热 Observable、调度器、多线程流 时,更宜引入 UniRx / R3 等专用库
希望 Dispose 即可退订,并与 MonoBehaviour 生命周期 对齐超高频每帧推送且对分配极度敏感的路径(通知时会 复制 linker 列表,见 核心

文档分册(本站拆层)

分册内容
核心与属性IRocLinkable / IRocLinkerRocLinkableProperty、订阅语义与线程注意
操作符与组合When / As / CombineLatestLink(Action)
Unity 与 UI 绑定LinkToRocLinkUIBindingExtensions、与 uGUI 控件双向联动
示例纯逻辑联动、操作符链式、Unity 绑定三个最小落地示例

源码目录(与磁盘一致)

Assets/RocPlay/Extensions/Reactive/
├── Core/
│   ├── IRocLinkable.cs
│   ├── RocLinkableProperty.cs
│   └── RocLinkableExtensions.cs
├── Unity/
│   ├── RocLinkLifecycleExtensions.cs
│   └── RocLinkUIBindingExtensions.cs
└── RocPlay.Extensions.Reactive.asmdef

横向拓展总览 · 扩展一览 · 示例