一次 Roll 的完整生命周期
框架生命周期不是 Unity 场景级生命周期,而是玩法请求级生命周期:一次 RollFlowRequest 进入核心服务,沿着 Roll、Facts、Rules、Actions、LuckySelection、TargetMode 和 Trace 形成闭环。
主链路
RollFlowRequest -> DiceRollService.Roll -> ComboFactBuilder.Build -> ComboRuleMatcher.Match -> RollActionDispatcher.Execute -> LuckyDiceFlowService.Select [只有触发 Lucky Dice 时] -> TargetModeResolver.Resolve [只有选中 Lucky Dice 候选时] -> RollFlowResult + RollTrace
LuckyDiceRollFlowService.Execute 是整个核心生命周期的编排点。它创建 RollTrace,执行普通骰子 Roll,把结果转成组合事实,再匹配规则和分发 action。如果 action 结果中包含 LuckyDiceRequestedEffect,才进入 Lucky Dice 选择和目标玩法解析。
生命周期所有权
| 阶段 | 所有者 | 输入 | 输出 |
|---|---|---|---|
| 请求校验 | LuckyDiceRollFlowService | RollFlowRequest | 有效 session、dice set、trigger source。 |
| 骰子产生 | DiceRollService | DiceSetConfig、随机源 | DiceRollResult。 |
| 事实提取 | ComboFactBuilder | 普通骰子结果 | ComboFacts,含无序 key、计数、点数。 |
| 规则命中 | ComboRuleMatcher | facts、combo rules | 按优先级排列的 ComboRuleMatch。 |
| 行为执行 | RollActionDispatcher | action list、context | RewardEffect、MultiplierEffect、LuckyDiceRequestedEffect 等。 |
| 特殊骰子选择 | LuckyDiceFlowService | 候选池、请求上下文、Lucky Dice set | 选中候选、slot count、fallback 类型。 |
| 目标玩法解析 | TargetModeResolver | 选中候选、请求、倍率、mode definitions | TargetModeEntry 或失败原因。 |
Unity Demo 生命周期
Demo 层通过 LuckyDiceDemoController.Awake 构建 UI 并显示初始状态。用户点击按钮后,StartRoll 启动 coroutine,先做普通骰子动画,再调用 LuckyDiceDemoRunner.RunRandom 获取核心结果,并根据结果展示普通奖励、Clover Bonus 或 Lucky Dice 目标玩法。
这里的 UI 动画不是核心生命周期的一部分。核心已经在
RunRandom 调用时一次性算完,UI 只是消费结果并播放表现。可观测生命周期
RollTrace 贯穿同一个 RollSessionId,记录普通骰面、组合 key、命中规则、执行 action、Lucky Dice 候选数量、随机值、选中结果、解析出的模式和最终 outcome。这是定位“为什么进了某个玩法”的主线。
证据
- LuckyDiceRollFlowService.cs:32-103:一次 Roll 的完整编排。
- LuckyDiceFlowService.cs:16-49:Lucky Dice 候选筛选、权重随机、兜底和 slot count。
- TargetModeResolver.cs:9-33:选中结果到目标玩法模式的映射。
- RollTrace.cs:43-115:生命周期关键字段记录。
- LuckyDiceDemoController.cs:30-74:Demo 的 Awake、StartRoll、PlayRollFlow。