# Value-Observer **Repository Path**: River314588804/value-observer ## Basic Information - **Project Name**: Value-Observer - **Description**: 针对 CSharp 开发中需要单独建立 "值" 观察者的应用背景。可用于 Unity 平台。 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-01-12 - **Last Updated**: 2026-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: Unity, Tracker ## README # Value-Observer | 值观察者 ___ ![](https://gitee.com/River314588804/value-observer/raw/master/Doc/ValueObserver.png)
[![](https://img.shields.io/badge/支持-Unity-green)]() [![](https://img.shields.io/badge/支持-.NET-green)]()   #### 说明|仓库起源 ___ **简述** :针对数量庞大,且业务更新条件组合繁多,关系复杂的应用背景。
**详述** :在需要将多个变量(值)的变化传递给表现层(如 UI\模型-动作 等)或进行层级式消息分发的场景中,为了提升开发效率和代码的可维护性,需要一种机制来解决以下核心问题: ▣ **可处理** "单值" 变化。
▣ **可通知** 关注此 "单值" 的全订阅者。确保传达过程中准确、可靠。   #### 近期更新日志 ___ 1. 整合 [Unit DL Framework](https://gitee.com/River314588804/unity-uni-dl) 至此仓库。源仓库已关闭。 2. 添加 一个示例案例用于备忘与引导使用。   #### 说明|快速部署 ___ - 移动 `RStudio/` 下目录至解决方案/个人项目 即可。(示例代码见 `AppEntry.cs`)   #### 说明|部分文件与代码 ___ - Module Tracker:封装追踪值更新动作,定义与决策值更新规则与通知。 - Module Player(暂定):全局访问封装器 ##### 建立数据源与 Tracker 更新机制 ```csharp # 创建监听者 public readonly Tracker inputX = new("X轴输入"); public readonly Tracker inputY = new("Y轴输入"); # 接入数据源(示例为 Unity 新输入系统) input.actions.FindActionMap("Human").FindAction("Move").performed += value => this.inputX.Value = value.ReadValue().x; input.actions.FindActionMap("Human").FindAction("Move").started += value => this.inputX.Value = value.ReadValue().x; input.actions.FindActionMap("Human").FindAction("Move").canceled += value => this.inputX.Value = value.ReadValue().x; # 添加判断规则 # HandlerRuleFloatEqualConst 继承 IHandlerRule 接口,可扩写自定义规则。 # 此处用于验证 inputX 轴值是否匹配 0f this.inputX.AddRule(new HandlerRuleFloatEqualConst("0f", 0f)); this.inputX.AddRule(new HandlerRuleFloatEqualConst("0.5f", 0.5f)); this.inputX.AddRule(new HandlerRuleFloatEqualConst("1f", 1f)); # 绑定头启动规则(责任链机制) this.inputX.HandlerHead = IHandlerRuleUtil.Bind(this.inputX.RuleDic.ToArray()); ``` ##### 注册数据层供全局访问 ```csharp # 若未实例化对象,则执行此方法即可自实例并注册 ModuleCenter.Instance.AddModule(); # 若已实例,则执行此方法注册 ModuleInputKeyboard module = new(); ModuleCenter.Instance.AddModule(module); ``` ##### 订阅数据源 ``` var module = ModuleCenter.Instance.GetModule() # 获取 InputX 中关于 "值=0" 的规则下事件通知 module.inputX.GetEvent("0f").OnValueUpdated += () => Debug.Log("Done"); # 若需要获取值信息 module.inputX.GetEvent("0f").OnValueUpdated += () => Debug.Log(module.inputX.Value); # 若希望委托传值,可添加 Action 等作为首选 ```