Files
aibis-dream/Assets/Scripts/MiniGame/HuoShan/Language/AnalysisMode/README.md
T
2025-12-09 21:42:49 +08:00

351 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 分析模式 (Analysis Mode) 使用说明
## 概述
分析模式是一个记忆解密游戏,玩家需要通过调节情绪频率来过滤网格中的词语,并使用解码器条纹来验证正确的句子。
## 功能特性
### 1. 核心玩法
- **20x20 网格系统**:展示焦虑词语粒子(笑话片段掩盖真实情绪词)
- **情绪频率调节**:通过滑动条调节情绪频率(0-100 Hz)来过滤显示不同情绪的词语
- **解码器条纹**:可拖拽的解码器条纹,用于验证正确的词语位置
- **验证系统**:当条纹位置和情绪频率都正确时,可以解密出完整句子
### 2. 情绪类型
- **Joy(快乐)**:频率 15 Hz,颜色黄色
- **Sadness(悲伤)**:频率 40 Hz,颜色蓝色
- **Anger(愤怒)**:频率 65 Hz,颜色红色
- **Fear(恐惧)**:频率 90 Hz,颜色紫色
- **Neutral(中性/噪音)**:无固定频率,灰色
### 3. 显示效果
- **锁定区(距离 < 5 Hz)**:显示真实词语,高亮显示
- **闪烁区(5-20 Hz)**:在真实词和掩盖词之间闪烁
- **淡出区(20-35 Hz)**:显示掩盖词,逐渐淡化
- **消失区(> 35 Hz**:几乎不可见
## Unity 编辑器设置
### 1. 场景结构(使用共享 Canvas)
分析模式共享 LanguageParticleManager 的 WorldSpace Canvas
```
Expression View
├── Expression Camera
├── Expression Deep Camera
├── Language Particle Manager
│ └── Language Canvas (WorldSpace Canvas - 共享)
│ ├── FloatingParticles (粒子系统)
│ ├── CandidateParticles (粒子系统)
│ └── Analysis Panel (分析模式UI)
│ ├── Control Panel (左侧控制区)
│ │ ├── Emotion Control (情绪控制区)
│ │ │ ├── Initialize Button
│ │ │ ├── Frequency Text
│ │ │ ├── Emotion Slider
│ │ │ └── Signal Strength Text
│ │ ├── Start Filter Button
│ │ ├── Verify Button
│ │ └── Log Scroll View
│ │ └── Log Text
│ └── Grid Container (右侧网格区)
│ └── Decoder Strip (可拖拽的解码器)
└── Analysis Mode Manager (AnalysisModeManager 组件)
```
**重要**:所有 UI 元素都在 Language Canvas 上渲染,不需要单独的 Canvas。
### 2. 创建预制体
#### 网格单元格预制体 (Grid Cell Prefab)
1. 创建一个空 GameObject,命名为 `GridCellPrefab`
2. 添加组件:
- `RectTransform`
- `Image`(背景)
- `AnalysisGridCell`(脚本)
3. 在子对象中添加 TextMeshPro 组件用于显示文字:
- 创建子对象 `Text`
- 添加 `TextMeshProUGUI` 组件
- 设置对齐方式为居中
- 设置字体大小为 13
#### 解码器条纹预制体 (Decoder Strip Prefab)
1. 创建一个空 GameObject,命名为 `DecoderStripPrefab`
2. 添加组件:
- `RectTransform`
- `Image`(背景,颜色为半透明青色)
- `CanvasGroup`
- `Outline`(边框效果)
- `AnalysisDecoderStrip`(脚本)
3. 设置大小为 `stripWidth * cellSize` x `stripHeight * cellSize`
### 3. AnalysisModeManager 配置
在 Inspector 中配置以下参数:
#### Canvas 引用(共享)
- `Shared Canvas`:拖入 LanguageParticleManager 的 Language CanvasWorldSpace Canvas
#### UI 引用
- `Analysis Panel`:主面板 RectTransform(在 Language Canvas 下)
- `Initialize Button`:初始化按钮
- `Emotion Slider`:情绪滑动条
- `Frequency Text`:频率显示文本
- `Signal Strength Text`:信号强度显示文本
- `Start Filter Button`:启动过滤按钮
- `Verify Button`:验证按钮
- `Log Text`:日志文本
- `Log Scroll Rect`:日志滚动区域
#### 网格配置
- `Grid Container`:网格容器 RectTransform
- `Grid Cell Prefab`:网格单元格预制体
- `Grid Width`20(网格宽度)
- `Grid Height`20(网格高度)
- `Cell Size`45(单元格大小)
- `Cell Gap`2(单元格间距)
#### 解码器条纹
- `Decoder Strip`:解码器条纹 RectTransform
- `Strip Hole Prefab`:条纹孔洞预制体(可选)
- `Strip Width`5(条纹宽度,列数)
- `Strip Height`3(条纹高度,行数)
#### 动画配置
- `Panel Slide Duration`0.5(面板滑动时间)
- `Data Load Duration`1.5(数据加载时间)
- `Slide Ease`OutCubic(滑动缓动曲线)
#### 焦虑短句配置
- 添加多个焦虑短句,用于填充网格(每个短句会被分割成2字符片段)
#### 目标配置
- `Target Sentence`:目标句子(例如:"[临检]要来了,不合格[英里]被骂了,这让我很[担心]")
### 4. ExpressionManager 配置
在 ExpressionManager 中添加对 AnalysisModeManager 的引用:
1. 在 Inspector 中找到 `Expression Manager` 组件
2.`Analysis Mode Manager` 拖拽到 `Analysis Mode Manager` 字段
## Yarn 命令接口
### 启动分析模式
在 Yarn 对话脚本中使用以下命令启动分析模式:
```yarn
<<StartAnalysisMode>>
```
或者带参数:
```yarn
<<StartAnalysisMode "CompletionNodeName">>
```
### 关闭分析模式
```yarn
<<CloseAnalysisMode>>
```
### 完整示例
```yarn
title: 表达系统_分析模式
---
角色:现在让我们尝试一种新的方式来理解你的焦虑...
角色:这是一个记忆解密系统,通过调节情绪频率来寻找隐藏的真相。
// 启动分析模式
<<StartAnalysisMode "表达系统_分析完成">>
-> 等待玩家完成...
===
title: 表达系统_分析完成_Success
---
角色:做得很好!你成功解密了记忆碎片。
角色:现在你明白了自己真正担心的是什么...
<<CloseAnalysisMode>>
===
title: 表达系统_分析完成_Fail
---
角色:似乎还不太对...要不要再试一次?
-> 再试一次
<<StartAnalysisMode "表达系统_分析完成">>
-> 稍后再说
<<CloseAnalysisMode>>
===
```
## C# 代码接口
### 在脚本中调用
```csharp
using AibisDream;
// 获取 ExpressionManager
var expressionManager = FixSystemCenter.SystemDic.Get<ExpressionManager>();
// 启动分析模式
List<string> anxietyPhrases = new List<string>
{
"临检要来了大家都很紧张只有销售员说终于可以检查业绩了",
"不合格英里被骂了因为销售业绩太差了",
"我担心业绩会下滑结果真的下滑了我的担心是对的"
};
expressionManager.StartAnalysisMode(anxietyPhrases, "CompletionNodeName");
// 关闭分析模式
expressionManager.CloseAnalysisMode();
```
## 玩法流程
### 完整游戏流程
1. **完成语言粒子游戏**
- 玩家先完成 LanguageParticleManager 的语言整合游戏
- 目标粒子连接成功,显示目标句子
2. **启动分析模式**
- 通过 Yarn 命令启动分析模式
- 分析控制面板在共享 Canvas 上显示
3. **初始化数据**
- 在 Emotion Control 区域点击"初始化"按钮
- 网格开始填充焦虑词语数据(Matrix 风格动画)
4. **启动过滤分析**
- 点击"启动过滤分析"按钮
- 解码器条纹出现在网格上
- 情绪滑动条变为可用
5. **调节频率**
- 拖动情绪滑动条(0-100 Hz
- 观察不同情绪词语的显示效果:
- 接近目标频率:词语高亮显示
- 中等距离:闪烁效果
- 远距离:淡化消失
6. **拖动条纹**(可选):
- 拖动解码器条纹到不同位置
- 通过条纹的"孔洞"查看下方的词语
7. **验证匹配**
- 点击"验证对齐"按钮
- 系统检查:
- 条纹位置是否正确
- 情绪频率是否在正确范围内(< 8 Hz 偏差)
8. **查看结果**
- **成功**:显示完整句子,触发成功对话节点(如 `AnalysisComplete_Success`
- **失败**:提示调整频率或位置,触发失败对话节点(如 `AnalysisComplete_Fail`
### 设计意图
- 分析模式是语言粒子游戏的"深入分析"环节
- 玩家通过调节情绪频率来"解密"隐藏在笑话中的真实焦虑
- 整个过程在同一个 WorldSpace Canvas 上完成,保持视觉连贯性
## 自定义配置
### 修改目标答案
`AnalysisModeManager.SetupTargets()` 方法中修改目标配置:
```csharp
private void SetupTargets()
{
analysisTargets.Clear();
// 创建正确答案目标
var correctTarget = new AnalysisTarget
{
name = "Fear Solution 1",
emotion = EmotionType.Fear,
stripPosition = new Vector2Int(3, 5), // 条纹正确位置
isCorrectAnswer = true
};
// 添加目标词
correctTarget.words.Add(new TargetWord
{
position = new Vector2Int(3, 5),
word = "临检",
cover = "检查"
});
// ... 添加更多目标词
analysisTargets.Add(correctTarget);
}
```
### 修改情绪配置
`EmotionConfig` 类中修改情绪频率和颜色:
```csharp
public static EmotionConfig Fear => new EmotionConfig
{
type = EmotionType.Fear,
frequency = 90f, // 修改频率
color = new Color(0.67f, 0f, 1f, 1f), // 修改颜色
displayName = "FEAR"
};
```
## 故障排除
### 问题:网格没有显示
- 检查 `Grid Container` 是否正确设置
- 检查 `Grid Cell Prefab` 是否正确配置
- 确保焦虑短句列表不为空
### 问题:解码器条纹无法拖动
- 检查 `AnalysisDecoderStrip` 组件是否添加
- 确保 `isDraggable` 设置为 true
- 检查是否有 `EventSystem` 在场景中
### 问题:验证总是失败
- 检查 `SetupTargets()` 中的目标位置是否正确
- 确保情绪频率设置在正确范围内(< 8 Hz 偏差)
- 检查日志输出,查看条纹位置和频率信息
## 性能优化建议
- 网格大小建议不超过 25x25
- 单元格数量过多时,考虑使用对象池
- 过滤效果更新频率可以降低(例如每 0.1 秒更新一次)
- 使用 DOTween 的 `.SetRecyclable(true)` 来减少 GC
## 未来扩展
- 添加多个解码器条纹孔洞位置配置
- 支持条纹自动吸附到网格
- 添加音效和粒子效果
- 支持多个正确答案
- 添加提示系统
- 记录玩家尝试次数和时间
## 版本历史
- **v1.0.0**2025-12-09):初始版本
- 基础网格系统
- 情绪过滤功能
- 解码器条纹
- Yarn 命令接口