← 返回总览结构与分层

宏观看 FishDice 的结构和分层

当前框架把真正的玩法决策放在 Runtime/LuckyDice,把 Unity 场景、按钮、Canvas、Editor 菜单和演示逻辑隔离在 Demo 层。这是非常明确的“核心域模型先行”结构。

目录分层

层级位置职责依赖判断
Runtime 核心Assets/FishDice/Runtime/LuckyDice骰子配置、Roll、组合事实、规则、Action、Lucky Dice 候选、TargetMode、Trace。纯 C#,asmdef 不引用 UnityEngine。
Demo 表现Assets/FishDice/Demo运行核心流程,格式化结果,构建一个可交互 UGUI 演示。引用 FishDice.RuntimeUnityEngine.UI
DemoEditorAssets/FishDice/DemoEditor通过菜单创建 LuckyDiceDemo 场景,并加入 Build Settings。依赖 UnityEditor,只服务编辑器构建。
TestsAssets/FishDice/Tests/EditMode/LuckyDice验证核心链路、配置校验、扩展注册、Demo 输出。用固定随机源验证可回放行为。
DocsDocs需求、规格、ADR、架构蓝图和资源交接资料。当前实现与文档目标大体一致,但以源码为准。

核心内部切分

Data
只放不可变或近似不可变的数据结构:DiceFaceDiceRollResultComboFactsRollFlowResult、各种 Effect。
Config
默认配置、配置定义行、定义加载、配置校验和错误类型。
Services
DiceRollServiceComboFactBuilder 处理基础 Roll 与事实提取。
Rules
ComboRuleMatcher 按优先级和 MatcherType 匹配规则。
Actions
RollActionDispatcher 按 ActionType 分发,避免组合 key 直接绑定方法。
LuckySelection
LuckyDiceFlowService 筛选候选、权重随机、兜底和结果槽数量。
TargetMode
TargetModeResolver 把选中的 Lucky Dice 结果映射到具体目标玩法模式。

依赖方向

依赖方向基本是单向的:Demo 依赖 Runtime,Runtime 内部由 LuckyDiceRollFlowService 编排各个小服务。核心服务只接收结构化输入并返回结构化结果,不调用场景、Canvas、Prefab 或 MonoBehaviour。

这意味着核心玩法可以在 EditMode 测试中直接运行,不需要打开 Unity 场景,也不需要模拟 UI 动画。

证据