10 KiB
10 KiB
火山波形系统设计文档
一、设计理念
波形的叙事意义
┌─────────────────────────────────────────────────────────────────────┐
│ 火山的滤波器处理流程 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 情绪波形(悲伤/焦虑) ──┐ │
│ ▼ 低频、沉重、颤抖 │ │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ 限幅检查 │ ← 通过 │
│ └────┬─────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ 屏蔽检查 │ ← 通过 │
│ └────┬─────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │【修改器】 │ ← 悲伤 → 亢奋(笑话) ⚠️ │
│ └────┬─────┘ │
│ │ │
│ 逻辑波形(简单方波) ──┐ │ │
│ ▼ 规则、清晰、可预测 │ │ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ │
│ │ 混合 │ │
│ └────┬─────┘ │
│ │ │
│ ▼ │
│ 滤波器输出(逻辑 + 笑话波形) │
│ ▼ 包含逻辑成分,但情绪被篡改 │
│ │ │
│ ▼ │
│ 表达模块(调用高频笑话频段) │
│ │
└─────────────────────────────────────────────────────────────────────┘
波形类型说明
| 波形ID | 名称 | 视觉特征 | 叙事意义 |
|---|---|---|---|
emotion |
情绪波形 | 低频、缓慢起伏、带颤抖和下沉感 | 悲伤/焦虑/恐惧的情绪 |
logic |
逻辑波形 | 简单方波、规则清晰 | 理性思考、逻辑判断 |
joke |
笑话波形 | 高频、尖锐、快速起伏 | 被修改后的亢奋情绪 |
filter_output |
滤波器输出(异常) | 逻辑骨架 + 笑话波形 | 调用笑话表达的异常信号 |
normal_output |
滤波器输出(正常) | 逻辑 + 情绪的和谐混合 | 正常的表达信号 |
比对逻辑
波形比对的核心设计:
滤波器输出(filter_output) vs 逻辑(logic)
→ 匹配成功 ✓
→ 因为滤波器输出包含逻辑成分
滤波器输出(filter_output) vs 情绪(emotion)
→ 匹配失败 ✗
→ 因为原始情绪已被修改器篡改成笑话
正常输出(normal_output) vs 逻辑/情绪
→ 匹配成功 ✓
→ 修复后的输出包含两种成分
二、Yarn命令参考
基础波形显示
// 显示指定波形
<<show_waveform "emotion">> // 情绪波形
<<show_waveform "logic">> // 逻辑波形
<<show_waveform "joke">> // 笑话波形
<<show_waveform "filter_output">> // 滤波器输出(异常)
<<show_waveform "normal_output">> // 滤波器输出(正常)
// 隐藏波形
<<hide_waveform>>
// 完全隐藏设备(滑出)
<<hide_waveform_device>>
波形变换
// 展示情绪被修改成笑话的过程
<<transform_waveform "emotion" "joke" 1.5>>
波形比对(自动判断)
// 滤波器输出 vs 逻辑 → 自动匹配成功
<<compare_waveforms "filter_output" "logic">>
// 滤波器输出 vs 情绪 → 自动匹配失败
<<compare_waveforms "filter_output" "emotion">>
步进模式(展示完整滤波器流程)
// 方式一:自动步进(推荐)
<<start_step_mode>>
<<execute_next_step>> // Step 1: 逻辑输入
<<execute_next_step>> // Step 2: 情绪输入
<<execute_next_step>> // Step 3: 限幅检查
<<execute_next_step>> // Step 4: 屏蔽检查
<<execute_next_step>> // Step 5: 修改器执行(关键!)
<<execute_next_step>> // Step 6: 混合输出
<<hide_step_progress>>
// 方式二:手动控制
<<show_step_progress 0 6>>
<<update_step_progress 1>>
// ... 自定义逻辑
<<hide_step_progress>>
RAM报错效果
<<show_error_flood 8 0.25>> // 8个错误,0.25秒间隔
<<clear_errors>>
三、Unity配置指南
1. 创建波形配置
- 在Project窗口右键
- 选择
Create > AibisDream > Waveform > Waveform Config - 配置各波形的颜色和参数
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 (青绿)
动画建议
- 情绪波形: 慢速(0.8),低频,带有不规则颤抖
- 逻辑波形: 中速(2.0),规则方波
- 笑话波形: 快速(4.0),高频,尖锐
- 变换动画: 1.5秒,带抖动效果
- 比对动画: 搜索+靠近+结果(成功闪烁/失败抖动)
五、典型使用场景
场景1: 初次检查滤波器输出
医生: 让我看看滤波器输出...
<<show_waveform "filter_output">>
医生: 这个波形看起来很奇怪,让我和逻辑模块对比一下。
<<compare_waveforms "filter_output" "logic">>
医生: 逻辑部分是对的...再和情绪模块对比。
<<compare_waveforms "filter_output" "emotion">>
医生: 情绪波形完全对不上!问题出在这里。
<<hide_waveform_device>>
场景2: 步进查看滤波器流程
医生: 让我进入步进模式,看看滤波器内部发生了什么。
<<start_step_mode>>
医生: 首先是逻辑模块输入...
<<execute_next_step>>
医生: 检测通过,没问题。
医生: 然后是情绪模块输入...
<<execute_next_step>>
医生: 好的,情绪信号进来了。
医生: 限幅器检查...
<<execute_next_step>>
医生: 幅度正常。
医生: 屏蔽器检查...
<<execute_next_step>>
医生: 没有需要屏蔽的内容。
医生: 现在是修改器...
<<execute_next_step>>
医生: 等等!情绪波形被修改了!原本的悲伤变成了...亢奋?
医生: 最后混合输出...
<<execute_next_step>>
医生: 所以这就是为什么他不停讲笑话。悲伤的情绪被转换成了笑话。
<<hide_step_progress>>
场景3: 展示修改过程
医生: 让我展示一下情绪是如何被修改的。
<<show_waveform "emotion">>
医生: 这是原本的情绪波形,你能感受到那种悲伤和焦虑吗?
<<transform_waveform "emotion" "joke" 2.0>>
医生: 修改器把它变成了这样——一个亢奋的、尖锐的笑话信号。
<<hide_waveform_device>>