# 火山波形系统设计文档 ## 一、设计理念 ### 波形的叙事意义 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ 火山的滤波器处理流程 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ 情绪波形(悲伤/焦虑) ──┐ │ │ ▼ 低频、沉重、颤抖 │ │ │ │ │ │ ▼ │ │ ┌──────────┐ │ │ │ 限幅检查 │ ← 通过 │ │ └────┬─────┘ │ │ │ │ │ ▼ │ │ ┌──────────┐ │ │ │ 屏蔽检查 │ ← 通过 │ │ └────┬─────┘ │ │ │ │ │ ▼ │ │ ┌──────────┐ │ │ │【修改器】 │ ← 悲伤 → 亢奋(笑话) ⚠️ │ │ └────┬─────┘ │ │ │ │ │ 逻辑波形(简单方波) ──┐ │ │ │ ▼ 规则、清晰、可预测 │ │ │ │ │ │ │ │ ▼ ▼ │ │ ┌──────────┐ │ │ │ 混合 │ │ │ └────┬─────┘ │ │ │ │ │ ▼ │ │ 滤波器输出(逻辑 + 笑话波形) │ │ ▼ 包含逻辑成分,但情绪被篡改 │ │ │ │ │ ▼ │ │ 表达模块(调用高频笑话频段) │ │ │ └─────────────────────────────────────────────────────────────────────┘ ``` ### 波形类型说明 | 波形ID | 名称 | 视觉特征 | 叙事意义 | |--------|------|----------|----------| | `emotion` | 情绪波形 | 低频、缓慢起伏、带颤抖和下沉感 | 悲伤/焦虑/恐惧的情绪 | | `logic` | 逻辑波形 | 简单方波、规则清晰 | 理性思考、逻辑判断 | | `joke` | 笑话波形 | 高频、尖锐、快速起伏 | 被修改后的亢奋情绪 | | `filter_output` | 滤波器输出(异常) | 逻辑骨架 + 笑话波形 | 调用笑话表达的异常信号 | | `normal_output` | 滤波器输出(正常) | 逻辑 + 情绪的和谐混合 | 正常的表达信号 | ### 比对逻辑 波形比对的核心设计: ``` 滤波器输出(filter_output) vs 逻辑(logic) → 匹配成功 ✓ → 因为滤波器输出包含逻辑成分 滤波器输出(filter_output) vs 情绪(emotion) → 匹配失败 ✗ → 因为原始情绪已被修改器篡改成笑话 正常输出(normal_output) vs 逻辑/情绪 → 匹配成功 ✓ → 修复后的输出包含两种成分 ``` --- ## 二、Yarn命令参考 ### 基础波形显示 ```yarn // 显示指定波形 <> // 情绪波形 <> // 逻辑波形 <> // 笑话波形 <> // 滤波器输出(异常) <> // 滤波器输出(正常) // 隐藏波形 <> // 完全隐藏设备(滑出) <> ``` ### 波形变换 ```yarn // 展示情绪被修改成笑话的过程 <> ``` ### 波形比对(自动判断) ```yarn // 滤波器输出 vs 逻辑 → 自动匹配成功 <> // 滤波器输出 vs 情绪 → 自动匹配失败 <> ``` ### 步进模式(展示完整滤波器流程) ```yarn // 方式一:自动步进(推荐) <> <> // Step 1: 逻辑输入 <> // Step 2: 情绪输入 <> // Step 3: 限幅检查 <> // Step 4: 屏蔽检查 <> // Step 5: 修改器执行(关键!) <> // Step 6: 混合输出 <> // 方式二:手动控制 <> <> // ... 自定义逻辑 <> ``` ### RAM报错效果 ```yarn <> // 8个错误,0.25秒间隔 <> ``` --- ## 三、Unity配置指南 ### 1. 创建波形配置 1. 在Project窗口右键 2. 选择 `Create > AibisDream > Waveform > Waveform Config` 3. 配置各波形的颜色和参数 ### 2. 设置波形检测器 ``` 场景层级结构: WaveformDetector (GameObject) ├── DeviceContainer (Transform - 用于滑动动画) │ ├── Background (可选 - 设备背景) │ ├── PrimaryWaveform (带LineRenderer和WaveformRenderer) │ │ └── GlowPoint (SpriteRenderer - 发光点) │ ├── SecondaryWaveform (带LineRenderer和WaveformRenderer) │ │ └── GlowPoint │ ├── TertiaryWaveform (带LineRenderer和WaveformRenderer,用于步进模式) │ │ └── GlowPoint │ ├── StepProgressPanel (步进UI) │ │ ├── StepText (Text) │ │ ├── StepSlider (Slider) │ │ └── StepDescriptionText (Text) │ └── CompareResultPanel │ └── ResultText (Text) └── CanvasGroup (用于淡入淡出) ``` ### 3. 组件配置 #### WaveformDetector 组件 | 属性 | 说明 | |------|------| | Waveform Config | 拖入创建的 WaveformConfig | | Device Container | DeviceContainer Transform | | Primary/Secondary/Tertiary Waveform | 三个波形渲染器 | | Hidden Position | 隐藏时的位置(屏幕外) | | Shown Position | 显示时的位置 | | Compare Position 1/2 | 比对时两个波形的位置 | | Step Input/Process/Output Position | 步进模式的位置 | #### WaveformRenderer 组件 | 属性 | 说明 | |------|------| | Wave Type | 波形类型(运行时会被配置覆盖) | | Wave Height | 波形高度 | | Wave Width | 波形宽度 | | Wave Speed | 波形滚动速度 | | Resolution | 线条分辨率(推荐200) | | Line Width | 线条粗细 | | Show Glow Point | 是否显示发光点 | --- ## 四、波形视觉设计建议 ### 颜色方案 ``` 情绪波形(悲伤): - Primary: #4D66CC (深蓝) - Secondary: #804DB3 (紫) 逻辑波形: - Primary: #33CC66 (绿) - Secondary: #4DE680 (亮绿) 笑话波形(亢奋): - Primary: #FF9933 (橙) - Secondary: #FF6666 (红橙) 滤波器输出(异常): - Primary: #FF804D (橙红) - Secondary: #CC994D (暗橙) 正常输出: - Primary: #66B3CC (青) - Secondary: #80CC99 (青绿) ``` ### 动画建议 1. **情绪波形**: 慢速(0.8),低频,带有不规则颤抖 2. **逻辑波形**: 中速(2.0),规则方波 3. **笑话波形**: 快速(4.0),高频,尖锐 4. **变换动画**: 1.5秒,带抖动效果 5. **比对动画**: 搜索+靠近+结果(成功闪烁/失败抖动) --- ## 五、典型使用场景 ### 场景1: 初次检查滤波器输出 ```yarn 医生: 让我看看滤波器输出... <> 医生: 这个波形看起来很奇怪,让我和逻辑模块对比一下。 <> 医生: 逻辑部分是对的...再和情绪模块对比。 <> 医生: 情绪波形完全对不上!问题出在这里。 <> ``` ### 场景2: 步进查看滤波器流程 ```yarn 医生: 让我进入步进模式,看看滤波器内部发生了什么。 <> 医生: 首先是逻辑模块输入... <> 医生: 检测通过,没问题。 医生: 然后是情绪模块输入... <> 医生: 好的,情绪信号进来了。 医生: 限幅器检查... <> 医生: 幅度正常。 医生: 屏蔽器检查... <> 医生: 没有需要屏蔽的内容。 医生: 现在是修改器... <> 医生: 等等!情绪波形被修改了!原本的悲伤变成了...亢奋? 医生: 最后混合输出... <> 医生: 所以这就是为什么他不停讲笑话。悲伤的情绪被转换成了笑话。 <> ``` ### 场景3: 展示修改过程 ```yarn 医生: 让我展示一下情绪是如何被修改的。 <> 医生: 这是原本的情绪波形,你能感受到那种悲伤和焦虑吗? <> 医生: 修改器把它变成了这样——一个亢奋的、尖锐的笑话信号。 <> ```