From 9076c11dbad7fa149caa0578c30c4e7d331b8e27 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Thu, 26 Feb 2026 17:15:45 +0800 Subject: [PATCH] =?UTF-8?q?docs(huoshan):=20=E6=B7=BB=E5=8A=A0=E9=94=80?= =?UTF-8?q?=E5=94=AE=E8=A7=86=E5=9B=BE=E5=8A=A8=E7=94=BB=E5=92=8C=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=9B=BE=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Docs/HuoShan/SaleView_EnterAnimation_Setup.md | 80 +++++ Docs/HuoShan/Test_Huoshan_flowchart.md | 316 ++++++++++++++++++ 2 files changed, 396 insertions(+) create mode 100644 Docs/HuoShan/SaleView_EnterAnimation_Setup.md create mode 100644 Docs/HuoShan/Test_Huoshan_flowchart.md diff --git a/Docs/HuoShan/SaleView_EnterAnimation_Setup.md b/Docs/HuoShan/SaleView_EnterAnimation_Setup.md new file mode 100644 index 000000000..024611f57 --- /dev/null +++ b/Docs/HuoShan/SaleView_EnterAnimation_Setup.md @@ -0,0 +1,80 @@ +# SaleView 进入动画配置指南 + +## 一、层级结构说明 + +SaleView(SellView)下主要结构: + +``` +SellView +└── 步进模式 + ├── 轨道底座A ~ 轨道底座H (轨道底座组,共 8 个) + ├── 内环 + ├── 外边框 + ├── 滑片c (滑片,需切换帧 a/b/c) + ├── 电夹 (夹片,需 fadein) + └── 其他(发条、线圈等) +``` + +## 二、实现方式:AnimClip + Animator Controller + +### 1. 创建 Animator 与脚本 + +1. 在 `步进模式` GameObject 上添加 `Animator` 组件(若无) +2. 添加 `SaleViewEnterAnimation` 脚本 +3. 将步进模式设为默认**初始状态**(缩起、夹片透明等) + +### 2. 创建 Animation Clip(SaleViewEnter.anim) + +在 `Assets/Animation/HuoShan/` 下创建 `SaleViewEnter.anim`,绑定到 `步进模式`,添加如下曲线: + +| 目标路径 | 属性 | 初始(0s) | 结束(0.6s) | 说明 | +|----------|------|----------|-------------|------| +| 轨道底座A ~ H | Transform.localScale | (0.3,0.3,1) | (1,1,1) | 轨道底座伸张 | +| 内环 | Transform.localScale | (0.5,0.5,1) | (1,1,1) | 内环放大 | +| 外边框 | Transform.localScale | (0.5,0.5,1) | (1,1,1) | 外边框放大 | +| 滑片c | SpriteRenderer.sprite | 滑片c 的 Sprite | 滑片a 的 Sprite | 帧切换 c→b→a | +| 电夹 | SpriteRenderer.color.a | 0 | 1 | 夹片淡入 | + +**滑片帧动画**:在 0s 使用滑片c Sprite,0.3s 使用滑片b,0.6s 使用滑片a(若资源有 a、b、c 三帧)。 + +### 3. 创建 Animator Controller(SaleViewEnter.controller) + +1. 创建 `SaleViewEnter.controller` +2. 添加 **Bool** 参数:`Enter`(或 **Trigger**:`Enter`) +3. 添加两个状态: + - **Idle**:默认状态,绑定一帧保持“缩起”的 clip(或空 clip) + - **Enter**:绑定 `SaleViewEnter.anim` +4. 默认状态设为 **Idle** +5. 添加 Transition:`Entry → Idle`,`Idle → Enter` 条件为 `Enter` Trigger,`Enter → Idle` 勾选 “Has Exit Time” + +### 4. 挂接到 SalesManager + +1. 将 `SaleViewEnter.controller` 赋给 `步进模式` 的 Animator +2. 在 `SaleViewEnterAnimation` 的 `animatorController` 中引用该 Controller(可选,脚本会使用 Animator 上已有的) +3. `SalesManager.OpenView()` 会自动调用 `SaleViewEnterAnimation.PlayEnterAnimation()` + +## 三、轨道底座组的两种做法 + +**方式 A:分别动画 8 个轨道底座** + +每个 `轨道底座A` ~ `轨道底座H` 各做一条 `localScale` 曲线,从 (0.3,0.3,1) 到 (1,1,1)。 + +**方式 B:建父节点统一缩放** + +1. 创建空 GameObject `轨道底座组` +2. 将 轨道底座A~H 拖为其子对象 +3. 只对 `轨道底座组` 做 `localScale` 动画 + +## 四、夹片(电夹)淡入 + +- 使用 `SpriteRenderer.color` 的 alpha 通道 +- 0s:alpha=0(透明) +- 0.6s:alpha=1(不透明) + +若夹片有多个(如电阻圈、线圈等),可分别做 alpha 曲线。 + +## 五、默认保持初始状态 + +- Animator 默认进入 **Idle** 状态 +- `SaleViewEnterAnimation.OnEnable()` 会执行 `Rebind()`,确保每次显示时从缩起状态开始 +- 进入销售系统时调用 `PlayEnterAnimation()` 播放进入动画 diff --git a/Docs/HuoShan/Test_Huoshan_flowchart.md b/Docs/HuoShan/Test_Huoshan_flowchart.md new file mode 100644 index 000000000..82697f53c --- /dev/null +++ b/Docs/HuoShan/Test_Huoshan_flowchart.md @@ -0,0 +1,316 @@ +# Test_Huoshan Yarn 完整流程图(Debug 用) + +> 基于 `Test_Huoshan.yarnproject` 及所有 `.yarn` 文件生成 + +## 0. Yarn Graph 布局说明 + +节点已按逻辑分组,position 与 tags 便于在 Yarn Editor 中浏览: + +| 区域 | X 范围 | 内容 | +|------|--------|------| +| 核心枢纽 | 300 | Start → VarsInit → Center(竖直) | +| Stage1 | 100 | 诊室开场(左列) | +| Stage2 主流程 | 150-450 | 检查表达→滤波器→情绪(中) | +| Stage2 分支 | 50-650 | 检查记忆/逻辑/视觉(插线入口上方) | +| 插线桥接 | 50-650, y=600 | Emo/Speak/Logic/Color/Memory/EyePlugIn | +| Stage3 销售 | 100-350 | 步进→转动完成→安装日志→旋钮(左中) | +| 销售桥接 | 550 | 销售模块转动完成、处理器单次调节失败 | +| Stage4-8 | 500 | 各 Stage 入口与结束(右列竖直) | +| 波形工具 | 700 | 波形_* 节点(最右) | + +**colorID 含义:** 1=入口, 2=Stage, 3=主流程/Expression, 4=变量, 5=销售, 6=波形, 7=桥接, 8=通用 + +## 1. 主流程总览 + +```mermaid +flowchart TB + subgraph entry ["入口"] + Start --> VarsInit + VarsInit --> Center + end + + subgraph center ["Center 调度 (按 $gameStage)"] + Center -->|1| Stage1 + Center -->|2| Stage2 + Center -->|3| Stage3 + Center -->|4| Stage4 + Center -->|5| Stage5 + Center -->|6| Stage6 + Center -->|7| Stage7 + Center -->|8| Stage8 + Center -->|100| 测试 + Center -->|999| NextYarn + end + + subgraph stage_flow ["Stage 流转"] + Stage1 --> S1_end["gameStage=2"] + Stage2 --> S2_end["gameStage=3"] + Stage3 --> S3_end["gameStage=4"] + Stage4 --> S4_end["gameStage=5"] + Stage5 --> S5_end["gameStage=6"] + Stage6 --> S6_end["gameStage=7"] + Stage7 --> S7_end["gameStage=8"] + Stage8 --> S8_end["gameStage=999"] + S1_end --> Center + S2_end --> Center + S3_end --> Center + S4_end --> Center + S5_end --> Center + S6_end --> Center + S7_end --> Center + S8_end --> Center + end +``` + +--- + +## 2. 变量初始化 (VarsInit) + +| 变量 | 说明 | +|------|------| +| `$gameStage` | 当前流程阶段 (1-8, 100=测试, 999=结束) | +| `$TaskToDo` | 待完成任务数 | +| `$emoChecked` / `$memoryChecked` / `$logicChecked` / `$eyeChecked` / `$speakerChecked` / `$colorChecked` / `$expressionChecked` | 各模块首次检查标记 | +| `$emoDeepChecked` / `$expressionSentenceGet` / `$hasTimestamp` | 深入检查标记 | +| `$currentSocket` / `$PlugCount` / `$PlugAll` | 插线相关 | +| `$salesTurnIndex` | 销售模块转动轮次 (1-based) | +| `$knobFailCount` | 旋钮调节失败次数 | + +--- + +## 3. Stage 1 - 诊室开场 + +```mermaid +flowchart LR + Stage1 --> 开头对话 + 开头对话 -->|"set $gameStage=2"| Center +``` + +- 内容:火山说笑话、发热 → 去诊室 + +--- + +## 4. Stage 2 - 后脑检查(插线) + +```mermaid +flowchart TB + Stage2["Stage2 入口"] + Stage2 --> Task["Task: 检查表达模块"] + Task --> 检查表达 + + subgraph 表达流程 + 检查表达 -->|"gameStage==2"| 表达完成["完成Task\nModuleHightLight Speak→color\nTask: 检查滤波器"] + 表达完成 --> 检查滤波器 + end + + 检查滤波器 -->|"gameStage==2"| 滤波器完成["波形分析\n发现锯齿波\nTask: 检查情绪模块"] + 滤波器完成 --> 检查情绪 + + subgraph 情绪与波形 + 检查情绪 --> 条件{"speakerChecked &&\ncolorChecked"} + 条件 -->|是| 查询情绪波形["对比预测波形与真实情绪\n发现对不上"] + 条件 -->|否| 结束 + 查询情绪波形 --> 结束Stage2["结束Stage2\ngameStage=3"] + end + + 检查表达 -.->|其他插线| 检查记忆 + 检查表达 -.->|其他插线| 检查逻辑 + 检查表达 -.->|其他插线| 检查视觉 + 检查表达 -.->|其他插线| 检查情绪 +``` + +**Stage2 插线入口(EventNode):** + +| 插线节点 | jump 目标 | +|----------|-----------| +| EmoPlugIn | 检查情绪 | +| SpeakPlugIn | 检查表达 | +| LogicPlugIn | 检查逻辑 | +| ColorPlugIn | 检查滤波器 | +| MemoryPlugIn | 检查记忆 | +| EyePlugIn | 检查视觉 | + +**关键顺序(gameStage==2):** 表达 → 滤波器 → 情绪(情绪需 speaker+color 都检查过才会对比波形 → 结束Stage2) + +--- + +## 5. Stage 3 - 滤波器深入(步进 + 销售模块) + +```mermaid +flowchart TB + Stage3["Stage3 入口\nTask: 检查滤波器处理链路"] + Stage3 --> 步进查看模式 + + subgraph 步进流程["步进流程(Yarn 仅显示情绪输入,其余由转动监听驱动)"] + 步进查看模式 --> 步进_情绪输入["步进_情绪输入\n显示原始情绪波形\n转动发条来检测吧"] + 步进_情绪输入 -->|"等待 SalesManager\n转动完成事件"| 销售模块转动完成 + end + + subgraph EventNode_销售["销售模块转动完成(EventNode 仅桥接,分发到 Stage3)"] + 销售模块转动完成["销售模块转动完成"] + 销售模块转动完成 -->|salesTurnIndex==1| 语义合成["销售转动_语义合成"] + 销售模块转动完成 -->|salesTurnIndex==2| 语言审查["销售转动_语言审查"] + 销售模块转动完成 -->|salesTurnIndex==3| 异常检测["销售转动_异常检测"] + end + + subgraph 安装日志与旋钮["调取安装日志 → 解锁旋钮 → 监听旋钮"] + 异常检测 --> 查询异常进程["查询异常进程\n情绪修改器组件"] + 查询异常进程 --> 查看安装日志["查看安装日志\n3年无复查"] + 查看安装日志 -->|"unlock_knob\n节点结束,等待旋钮"| 等待旋钮["KnobController 监听"] + 等待旋钮 -->|"用户转动超阈值"| 处理器单次调节失败 + end + + subgraph EventNode_旋钮["旋钮失败时 KnobController 跳入(EventNode 仅桥接)"] + 处理器单次调节失败["处理器单次调节失败\n<>"] + 处理器单次调节失败 --> 旋钮调节失败 + end + + subgraph 旋钮调节失败_Stage3["旋钮调节失败 (Stage3)"] + 旋钮调节失败["旋钮调节失败"] + 旋钮调节失败 -->|knobFailCount==1| 重试["再试一次\nreset_knob"] + 旋钮调节失败 -->|knobFailCount>=2| 最终失败["lock_knob + 叙事\njump 结束Stage3"] + end +``` + +**Stage3 关键流程:** +1. 步进_情绪输入 结束 → 对话暂停,等待玩家转动发条 +2. **转1**:销售模块转动完成 → 语义合成完成 +3. **转2**:销售模块转动完成 → 语言审查通过 +4. **转3**:销售模块转动完成 → 检测异常 → 进入处理器 → lock_knob → 查询异常进程 → 查看安装日志 → unlock_knob → 等待旋钮 +5. 旋钮失败 → 处理器单次调节失败(1次重试)→ 处理器功率调节失败 → 结束Stage3 + +--- + +## 6. Stage 4 - 表达模块 RAM + +```mermaid +flowchart TB + Stage4["Stage4 入口\nTask: 检查表达模块"] + Stage4 --> 检查表达 + + 检查表达 -->|"gameStage==4"| RAM发现["发现未释放log\nRAM溢出"] + RAM发现 --> 结束Stage4["结束Stage4\ngameStage=5"] +``` + +--- + +## 7. Stage 5 - 诊室对话 + +```mermaid +flowchart TB + Stage5["Stage5 入口"] + Stage5 --> 诊室对话["诊室对话\n火山承认+达成共识"] + 诊室对话 --> 结束Stage5["结束Stage5\ngameStage=6"] +``` + +--- + +## 8. Stage 6 - 释放 RAM + +```mermaid +flowchart TB + Stage6["Stage6 入口\nTask: 释放表达模块RAM"] + Stage6 --> 检查表达 + + 检查表达 -->|"gameStage==6"| 释放log["释放log\n自动释放 log1/2/3"] + 释放log --> 手动释放["遇到被干扰log\n进入手动释放"] + 手动释放 --> 手动释放log["手动释放log\nswitch Expression"] + 手动释放log --> LOG1["LOG1: 哈哈|嘿嘿|呵呵 → 我很害怕"] + LOG1 --> LOG1梳理完成 + LOG1梳理完成 --> LOG2["LOG2: ... → 她都是为了我"] + LOG2 --> LOG2梳理完成 + LOG2梳理完成 --> LOG3["LOG3: ... → 我不想再继续逃了"] + LOG3 --> LOG疏通全部完成 + LOG疏通全部完成 --> 结束Stage6["结束Stage6\ngameStage=7"] +``` + +--- + +## 9. Stage 7 - 最终检查 + +```mermaid +flowchart TB + Stage7["Stage7 入口\nTaskToDo=2"] + Stage7 --> Task1["Task: 检查表达模块"] + Stage7 --> Task2["Task: 检查滤波器"] + + 检查表达 -->|"gameStage==7"| 表达OK["完成Task\nTaskToDo--"] + 检查滤波器 -->|"gameStage==7"| 滤波器OK["完成Task\nTaskToDo--"] + + 表达OK --> 判断1{"TaskToDo==0?"} + 滤波器OK --> 判断1 + 判断1 -->|是| 结束Stage7["结束Stage7\ngameStage=8"] + 判断1 -->|否| 继续["继续等待另一项完成"] +``` + +--- + +## 10. Stage 8 - 结束对话 + +```mermaid +flowchart TB + Stage8["Stage8 入口"] + Stage8 --> 结束对话["结束对话\n火山说出真话"] + 结束对话 -->|"gameStage=999"| Center +``` + +--- + +## 11. EventNode 与波形节点 + +```mermaid +flowchart TB + subgraph 插线入口 + EmoPlugIn + SpeakPlugIn + LogicPlugIn + ColorPlugIn + MemoryPlugIn + EyePlugIn + end + + subgraph 销售相关 + 销售模块转动完成 + 处理器单次调节失败 + 处理器功率调节失败 + end + + subgraph 波形 + 波形_显示并连接 + 波形_显示情绪 + 波形_显示滤波器输出 + 波形_隐藏 + end +``` + +--- + +## 12. Debug 检查清单 + +| 现象 | 可能原因 | 检查点 | +|------|----------|--------| +| 流程卡住 | `$gameStage` 未正确更新 | Center 各 Stage 分支 | +| Stage2 不推进 | 表达/滤波器/情绪未按顺序完成 | 检查表达→滤波器→情绪,以及 speakerChecked+colorChecked | +| Stage3 步进不走 | 未从滤波器进入步进;或 SalesManager 未触发转动完成 | 检查滤波器 gameStage==3 的「进入步进查看模式」;检查 totalTurns≥3、crankCompleteNode | +| 销售模块无反馈 | SalesManager/KnobController 未跳转 | EventNode: 销售模块转动完成、处理器单次调节失败 | +| Stage4 无法进 | 需从 Stage3 结束 或 处理器功率调节失败 | 结束Stage3 与 处理器功率调节失败 都 `<>` | +| Stage6 手动释放卡住 | Expression 模块/restart_expression | start_expression / restart_expression 完成节点 | +| Stage7 TaskToDo 不清零 | 表达/滤波器 有一项未完成 | 两项都需 `complete_task` 且 `TaskToDo--` | +| 测试模式 | gameStage=100 | 测试 节点直接进入 Sales+EmotionWave | + +--- + +## 13. 文件与节点索引 + +| 文件 | 节点 | +|------|------| +| Center.yarn | Start, VarsInit, Center, 测试 | +| EventNode.yarn | EmoPlugIn, SpeakPlugIn, LogicPlugIn, ColorPlugIn, MemoryPlugIn, EyePlugIn, 销售模块转动完成, 处理器单次调节失败(桥接), 波形_* | +| Stage1.yarn | Stage1, 开头对话 | +| Stage2.yarn | Stage2, 检查表达, 检查滤波器, 检查情绪, 检查记忆, 检查逻辑, 检查视觉, 结束Stage2 | +| Stage3.yarn | Stage3, 步进查看模式, 步进_情绪输入, 销售转动_语义合成/语言审查/异常检测, 查询异常进程, 查看安装日志, 旋钮调节失败, 结束Stage3 | +| Stage4.yarn | Stage4, 结束Stage4 | +| Stage5.yarn | Stage5, 结束Stage5 | +| Stage6.yarn | Stage6, 手动释放log, LOG1/2/3梳理完成, LOG疏通全部完成, 结束Stage6 | +| Stage7.yarn | Stage7, 结束Stage7 | +| Stage8.yarn | Stage8, 结束对话 |