# FishDice UI 管理分析

← 返回总览 UI 管理

# UI 管理：Demo 是运行时构建 UGUI，核心框架尚未定义 UI 系统

当前 UI 设计思想是“表现层消费核心结果”。核心不依赖 UI；Demo Controller 用 Canvas、Text、Button 手写一个最小可交互界面。

## 现有 UI 链路

    LuckyDiceDemoController.Awake
      -> BuildUi
      -> ShowReady

    Button.onClick
      -> StartRoll
      -> PlayRollFlow coroutine
      -> LuckyDiceDemoRunner.RunRandom
      -> ApplyDiceTexts / ShowResult

UI 在点击后播放普通骰子文本轮播，再把核心结果写回 Text。若结果是 Lucky Dice，则显示 3 个 Lucky slot，再展示目标玩法信息。

## UI 设计思想

点 | 当前实现 | 含义
--- | --- | ---
核心和表现分离 | 核心先一次性算出 `LuckyDiceDemoSnapshot`。 | UI 动画不会参与规则、随机或目标模式决策。
状态展示集中 | `ShowReady`、`ShowResult`、`SetStatus`、`ApplyDiceTexts`。 | Demo 可读，但还不是可复用 UI 框架。
运行时构建界面 | `BuildUi` 代码创建 Canvas、Board、Text、Button。 | 方便演示，生产项目应改为 prefab/scene-authored UI。
缺少导航系统 | 没有 panel stack、modal、screen router、layer manager。 | 当前不能直接承担完整游戏 UI 管理。

## 生产化建议

### 保留核心输出模型

继续让核心输出 `RollFlowResult`、`TargetModeEntry`、`RollTrace`，UI 只消费这些结构。

### 拆 Presenter

把 Demo 中的格式化和状态展示拆成 Presenter/ViewModel，避免 UI 文本拼接散落在 Controller。

### Prefab 化

把 Canvas、骰子格、结果槽、按钮做成 prefab，运行时只绑定数据和触发动画。

### 建立玩法启动 UI 协议

`EnterTargetModeEffect` 或 `TargetModeEntry` 应交给上层流程/UI router，而不是 Demo Controller 直接决定跳转。

## 证据

- LuckyDiceDemoController.cs:11：Demo UI 是 `MonoBehaviour`。
- LuckyDiceDemoController.cs:131-178：运行时创建 Canvas、Board、Text 和 Button。
- LuckyDiceDemoController.cs:46-74：UI coroutine 消费核心结果并播放表现。
- LuckyDiceDemoRunner.cs:40-76：DemoRunner 把核心结果格式化成 snapshot。
- Runtime asmdef：核心不引用 Unity UI。