# 记忆解密器 (Memory Decryptor) ## 概述 记忆解密器是一个基于 Web 原型移植的语言分析系统,作为 ExpressionManager 的一个分析模式。玩家需要通过调整情绪频率和拖动解码器条来从笑话碎片中解密出隐藏的真实情感语句。 ## 核心机制 ### 1. 网格系统 - 20x20 网格显示笑话碎片(每个单元格显示2个字符) - 真实的情感词汇被"笑话"掩盖 - 通过调整频率可以让特定情绪的词汇显现 ### 2. 情绪频率 四种情绪对应不同的频率值(0-100): - **JOY (喜悦)**: 15Hz - 黄色 - **SADNESS (悲伤)**: 40Hz - 蓝色 - **ANGER (愤怒)**: 65Hz - 红色 - **FEAR (恐惧)**: 90Hz - 紫色 ### 3. 解码器条 - 5x3 的透明"孔"模板 - 可拖动到网格的不同位置 - 正确位置 + 正确频率 = 解密成功 ### 4. 视觉状态 根据频率距离,单元格会呈现不同状态: - **Locked (<5Hz距离)**: 完全显现,高亮显示 - **Glitch (5-20Hz)**: 闪烁状态,真实词汇和掩盖词汇交替 - **Fading (20-35Hz)**: 渐隐,显示掩盖词汇 - **Hidden (>35Hz)**: 几乎不可见 - **Noise**: 中性噪音,始终半透明 ## 使用方法 ### 在 Unity 中设置 1. **创建配置文件(可选)** - 【推荐】无需创建,系统自动使用默认配置 ✨ - 【自定义】右键 → Create → AibisDream → Language → Memory Decryptor Config - 配置网格大小、笑话数据、目标数据等 2. **设置场景** ``` ExpressionManager └── MemoryDecryptorMode (脚本) - 只需配置 Config └── MemoryDecryptorRenderer (脚本) - 需配置 UI 组件引用 ├── Grid Container (RectTransform) ├── Decoder Strip Container (RectTransform) ├── Frequency Display (TextMeshPro) ├── Log Text (TextMeshPro) └── Signal Bar (RectTransform) 注:MemoryDecryptorYarnCommands 是静态类,使用 [YarnCommand] 特性 自动注册,无需添加到场景中 ``` 3. **配置解码器模板** 在配置文件中设置 `decoderTemplate`: ``` Hole at (0, 0) // 第一个孔 Text at (0, 1) "要" Text at (0, 2) "来了" ... Hole at (1, 1) // 第二个孔 ... Hole at (2, 4) // 第三个孔 ``` 4. **配置目标数据** ``` Target 1: FEAR Solution - stripPos: (3, 5) // 解码器正确位置 - matches: - (3, 5) word:"临检" cover:"检查" - (4, 6) word:"英里" cover:"背后" - (5, 9) word:"担心" cover:"对的" ``` ### Yarn 对话中使用 ```yarn // 切换到记忆解密器模式 <> // 启动记忆解密器(指定完成后的节点) <> // 开始过滤模式 <> // 设置频率(可选,用于引导玩家) <> // 检查匹配(通常由玩家触发按钮) <> // 停止解密器 <> // 切换回粒子模式 <> ``` ### Yarn 节点反馈示例 ```yarn title: SuccessNode --- 太好了!你成功解密了记忆! [临检]要来了,不合格[英里]被骂了,这让我很[担心] 原来是这样的情绪... === title: SuccessNode_Fail --- 似乎不太对... 也许需要调整一下频率? 或者位置不太准确? === ``` ## 复古视觉效果 使用 Shapes 插件实现: - **CRT 显示效果**: 磷光绿色主色调 (#33ff00) - **扫描线**: 可选的后处理效果 - **字符显示**: 等宽字体,复古终端风格 - **发光效果**: 高亮文字的霓虹发光 - **故障效果**: 频率不匹配时的闪烁抖动 ## 配置示例 ### 简单示例(3个目标词) ``` 笑话: "临检要来了,不合格英里被骂了,这让我很担心" 解密目标: - "临检" (Fear, 90Hz) at (3, 5) - "英里" (Fear, 90Hz) at (4, 6) - "担心" (Fear, 90Hz) at (5, 9) 解码器位置: (3, 5) 情绪频率: 90Hz (FEAR) ``` ### 复杂示例(多个诱饵) 可以添加多个"接近但不完全正确"的目标位置作为诱饵,增加难度。 ## 技术细节 ### 性能优化 - 网格单元格使用对象池 - 故障效果限制更新频率(0.1s) - 仅在过滤激活时更新视觉效果 ### 扩展性 - 支持自定义网格大小 - 支持自定义情绪类型和频率 - 支持自定义解码器模板形状 - 支持多个谜题配置切换 ## 注意事项 1. **笑话数据量**: 确保提供足够的笑话(至少400个2字符碎片)填满20x20网格 2. **目标位置**: 确保目标位置与解码器孔位置对应 3. **频率容差**: 默认容差为±8Hz,可在代码中调整 4. **Shapes 依赖**: 需要安装 Shapes 插件 5. **Yarn 命令注册**: 使用 `[YarnCommand]` 特性自动注册,无需添加组件到场景 ## 调试技巧 1. 在 Inspector 中查看当前频率和解码器位置 2. 使用 OnMatchResult 事件监听匹配结果 3. 查看 Log 输出了解扫描结果 4. 在场景视图中可视化解码器孔的位置 ## 示例场景 参考 `WebPrototype/index.html` 中的原始实现来理解游戏机制。