分析模式 (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)
- 创建一个空 GameObject,命名为
GridCellPrefab - 添加组件:
RectTransformImage(背景)AnalysisGridCell(脚本)
- 在子对象中添加 TextMeshPro 组件用于显示文字:
- 创建子对象
Text - 添加
TextMeshProUGUI组件 - 设置对齐方式为居中
- 设置字体大小为 13
- 创建子对象
解码器条纹预制体 (Decoder Strip Prefab)
- 创建一个空 GameObject,命名为
DecoderStripPrefab - 添加组件:
RectTransformImage(背景,颜色为半透明青色)CanvasGroupOutline(边框效果)AnalysisDecoderStrip(脚本)
- 设置大小为
stripWidth * cellSizexstripHeight * cellSize
3. AnalysisModeManager 配置
在 Inspector 中配置以下参数:
Canvas 引用(共享)
Shared Canvas:拖入 LanguageParticleManager 的 Language Canvas(WorldSpace 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:网格容器 RectTransformGrid Cell Prefab:网格单元格预制体Grid Width:20(网格宽度)Grid Height:20(网格高度)Cell Size:45(单元格大小)Cell Gap:2(单元格间距)
解码器条纹
Decoder Strip:解码器条纹 RectTransformStrip 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 的引用:
- 在 Inspector 中找到
Expression Manager组件 - 将
Analysis Mode Manager拖拽到Analysis Mode Manager字段
Yarn 命令接口
启动分析模式
在 Yarn 对话脚本中使用以下命令启动分析模式:
<<StartAnalysisMode>>
或者带参数:
<<StartAnalysisMode "CompletionNodeName">>
关闭分析模式
<<CloseAnalysisMode>>
完整示例
title: 表达系统_分析模式
---
角色:现在让我们尝试一种新的方式来理解你的焦虑...
角色:这是一个记忆解密系统,通过调节情绪频率来寻找隐藏的真相。
// 启动分析模式
<<StartAnalysisMode "表达系统_分析完成">>
-> 等待玩家完成...
===
title: 表达系统_分析完成_Success
---
角色:做得很好!你成功解密了记忆碎片。
角色:现在你明白了自己真正担心的是什么...
<<CloseAnalysisMode>>
===
title: 表达系统_分析完成_Fail
---
角色:似乎还不太对...要不要再试一次?
-> 再试一次
<<StartAnalysisMode "表达系统_分析完成">>
-> 稍后再说
<<CloseAnalysisMode>>
===
C# 代码接口
在脚本中调用
using AibisDream;
// 获取 ExpressionManager
var expressionManager = FixSystemCenter.SystemDic.Get<ExpressionManager>();
// 启动分析模式
List<string> anxietyPhrases = new List<string>
{
"临检要来了大家都很紧张只有销售员说终于可以检查业绩了",
"不合格英里被骂了因为销售业绩太差了",
"我担心业绩会下滑结果真的下滑了我的担心是对的"
};
expressionManager.StartAnalysisMode(anxietyPhrases, "CompletionNodeName");
// 关闭分析模式
expressionManager.CloseAnalysisMode();
玩法流程
完整游戏流程
-
完成语言粒子游戏:
- 玩家先完成 LanguageParticleManager 的语言整合游戏
- 目标粒子连接成功,显示目标句子
-
启动分析模式:
- 通过 Yarn 命令启动分析模式
- 分析控制面板在共享 Canvas 上显示
-
初始化数据:
- 在 Emotion Control 区域点击"初始化"按钮
- 网格开始填充焦虑词语数据(Matrix 风格动画)
-
启动过滤分析:
- 点击"启动过滤分析"按钮
- 解码器条纹出现在网格上
- 情绪滑动条变为可用
-
调节频率:
- 拖动情绪滑动条(0-100 Hz)
- 观察不同情绪词语的显示效果:
- 接近目标频率:词语高亮显示
- 中等距离:闪烁效果
- 远距离:淡化消失
-
拖动条纹(可选):
- 拖动解码器条纹到不同位置
- 通过条纹的"孔洞"查看下方的词语
-
验证匹配:
- 点击"验证对齐"按钮
- 系统检查:
- 条纹位置是否正确
- 情绪频率是否在正确范围内(< 8 Hz 偏差)
-
查看结果:
- 成功:显示完整句子,触发成功对话节点(如
AnalysisComplete_Success) - 失败:提示调整频率或位置,触发失败对话节点(如
AnalysisComplete_Fail)
- 成功:显示完整句子,触发成功对话节点(如
设计意图
- 分析模式是语言粒子游戏的"深入分析"环节
- 玩家通过调节情绪频率来"解密"隐藏在笑话中的真实焦虑
- 整个过程在同一个 WorldSpace Canvas 上完成,保持视觉连贯性
自定义配置
修改目标答案
在 AnalysisModeManager.SetupTargets() 方法中修改目标配置:
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 类中修改情绪频率和颜色:
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 命令接口