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

10 KiB
Raw Blame History

分析模式 (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 Width20(网格宽度)
  • Grid Height20(网格高度)
  • Cell Size45(单元格大小)
  • Cell Gap2(单元格间距)

解码器条纹

  • Decoder Strip:解码器条纹 RectTransform
  • Strip Hole Prefab:条纹孔洞预制体(可选)
  • Strip Width5(条纹宽度,列数)
  • Strip Height3(条纹高度,行数)

动画配置

  • Panel Slide Duration0.5(面板滑动时间)
  • Data Load Duration1.5(数据加载时间)
  • Slide EaseOutCubic(滑动缓动曲线)

焦虑短句配置

  • 添加多个焦虑短句,用于填充网格(每个短句会被分割成2字符片段)

目标配置

  • Target Sentence:目标句子(例如:"[临检]要来了,不合格[英里]被骂了,这让我很[担心]")

4. ExpressionManager 配置

在 ExpressionManager 中添加对 AnalysisModeManager 的引用:

  1. 在 Inspector 中找到 Expression Manager 组件
  2. 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();

玩法流程

完整游戏流程

  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() 方法中修改目标配置:

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.02025-12-09):初始版本
    • 基础网格系统
    • 情绪过滤功能
    • 解码器条纹
    • Yarn 命令接口