7.6 KiB
7.6 KiB
语言分析系统 - 重构总结
📅 重构日期:2025-12-04
🎯 重构目标
将记忆解密器从 ExpressionManager 中分离出来,创建独立的 LanguageAnalysisManager 系统,并集成到 FixStateMachine 状态机中。
🔄 架构变更
旧架构 ❌
ExpressionManager
├── AnalysisMode 枚举 (Particle / MemoryDecryptor)
├── LanguageParticleManager
└── MemoryDecryptorMode
问题:
- 职责不清晰
- 两个完全不同的系统耦合在一起
- 无法独立测试记忆解密器
- 状态切换逻辑混乱
新架构 ✅
FixStateMachine
├── FixState.Expression → ExpressionManager
│ └── LanguageParticleManager (粒子表达系统)
│
└── FixState.LanguageAnalysis → LanguageAnalysisManager
└── MemoryDecryptorMode (记忆解密器)
└── 未来可扩展其他分析模式...
优势:
- ✅ 职责清晰分离
- ✅ 独立的状态管理
- ✅ 可以单独测试
- ✅ 符合项目架构规范
📦 新增文件
核心系统
Assets/Scripts/MiniGame/HuoShan/Language/LanguageAnalysis/
├── LanguageAnalysisManager.cs # 主管理器
├── LanguageAnalysisYarnCommands.cs # Yarn 状态切换命令
├── LanguageAnalysisState.cs # (已集成到 FixStateMachine.cs)
├── SETUP_GUIDE.md # 设置指南
├── REFACTORING_SUMMARY.md # 本文档
└── TestLanguageAnalysis.yarn # 测试对话
修改的文件
Assets/Scripts/FixSystemNew/FixStateMachine.cs
├── 新增 FixState.LanguageAnalysis 枚举
└── 新增 LanguageAnalysisState 结构体
Assets/Scripts/Framework/OtherKit/CameraKit.cs
├── 新增 CameraEnum.LanguageAnalysis
└── 新增 CameraEnum.LanguageAnalysisDeep
Assets/Scripts/MiniGame/HuoShan/Language/MemoryDecryptor/
└── MemoryDecryptorYarnCommands.cs
└── 从 ExpressionManager 改为 LanguageAnalysisManager
🎮 Yarn 命令变更
新增命令(状态切换)
| 命令 | 功能 | 示例 |
|---|---|---|
<<enter_language_analysis>> |
进入语言分析系统状态 | <<enter_language_analysis>> |
<<exit_language_analysis>> |
退出语言分析系统状态 | <<exit_language_analysis>> |
记忆解密器命令(无变化)
| 命令 | 功能 | 示例 |
|---|---|---|
<<memory_decryptor_start>> |
启动记忆解密器 | <<memory_decryptor_start Success>> |
<<memory_decryptor_filter_start>> |
开始过滤 | <<memory_decryptor_filter_start>> |
<<memory_decryptor_set_frequency>> |
设置频率 | <<memory_decryptor_set_frequency 90>> |
<<memory_decryptor_check>> |
检查匹配 | <<memory_decryptor_check>> |
<<memory_decryptor_stop>> |
停止解密器 | <<memory_decryptor_stop>> |
移除的命令
| 旧命令 | 原因 | 替代方案 |
|---|---|---|
<<switch_to_particle_mode>> |
系统分离,不再需要 | 使用状态机切换 |
<<switch_to_memory_decryptor_mode>> |
系统分离,不再需要 | 使用 enter_language_analysis |
📝 使用流程对比
旧流程 ❌
// 复杂且不清晰
<<switch_to_memory_decryptor_mode>>
<<memory_decryptor_start>>
// ...
<<switch_to_particle_mode>>
新流程 ✅
// 清晰的状态切换
<<enter_language_analysis>>
<<memory_decryptor_start Success>>
// 玩家操作...
title: Success
---
<<memory_decryptor_stop>>
<<exit_language_analysis>>
===
🔧 技术改进
1. 状态机集成
// ✅ 新增 LanguageAnalysisState
public struct LanguageAnalysisState : IState<FixState>
{
public IEnumerator Enter()
{
// 1. 切换到 BodyModule (Head)
// 2. 打开视图
// 3. 相机切换 (LanguageAnalysis → LanguageAnalysisDeep)
// 4. 淡入淡出效果
}
public IEnumerator Exit()
{
// 1. 关闭视图
// 2. 重置 Plug
}
}
2. 系统注册
// ✅ LanguageAnalysisManager 自动注册到 SystemDic
void Start()
{
FixSystemCenter.SystemDic.Register(this);
}
3. 相机管理
// ✅ 新增相机枚举
public enum CameraEnum
{
// ... 其他相机
LanguageAnalysis,
LanguageAnalysisDeep,
}
📊 对比总结
| 方面 | 旧架构 | 新架构 |
|---|---|---|
| 职责 | 混合在一起 | 清晰分离 |
| 状态管理 | 内部枚举 | FixStateMachine |
| 独立测试 | ❌ 困难 | ✅ 简单 |
| 相机 | 共用 Expression 相机 | 独立的 LanguageAnalysis 相机 |
| Yarn 命令 | 6个 | 7个(2个新状态命令 + 5个解密器命令) |
| 扩展性 | ❌ 受限 | ✅ 易于扩展 |
| 符合规范 | ❌ 特殊处理 | ✅ 符合项目架构 |
🎯 迁移指南
如果你之前使用了记忆解密器
步骤 1:更新 Yarn 对话
# 旧代码
<<switch_to_memory_decryptor_mode>>
<<memory_decryptor_start>>
# 新代码
<<enter_language_analysis>>
<<memory_decryptor_start>>
步骤 2:创建新的场景设置
按照 SETUP_GUIDE.md 创建 LanguageAnalysisManager
步骤 3:移除旧的 ExpressionManager 引用
- 不再需要在 ExpressionManager 中配置记忆解密器
- 记忆解密器相关代码已移至 LanguageAnalysisManager
步骤 4:测试
使用 TestLanguageAnalysis.yarn 验证功能
✅ 测试清单
功能测试
- 进入语言分析状态
<<enter_language_analysis>> - 相机切换正常
- 启动记忆解密器
<<memory_decryptor_start>> - Boot 序列正常播放
- 网格数据加载正常
- 频率调整正常
- 解码器条拖动正常
- 匹配检测正常
- 成功节点跳转正常
- 失败节点跳转正常
- 停止解密器
<<memory_decryptor_stop>> - 退出语言分析状态
<<exit_language_analysis>>
状态机测试
- 从 Clinic 切换到 LanguageAnalysis
- 从 LanguageAnalysis 切换回 Clinic
- 状态切换时的淡入淡出效果
- Plug 重置正常
- UI 显示/隐藏正常
集成测试
- 与其他状态切换无冲突
- Expression 状态独立工作正常
- 不影响其他系统
🚀 未来扩展
有了独立的 LanguageAnalysisManager,未来可以轻松添加更多分析模式:
public class LanguageAnalysisManager : MonoBehaviour
{
private MemoryDecryptorMode memoryDecryptorMode;
private SyntaxAnalyzerMode syntaxAnalyzerMode; // 🆕 未来扩展
private SemanticMapMode semanticMapMode; // 🆕 未来扩展
private EmotionGraphMode emotionGraphMode; // 🆕 未来扩展
public void StartSyntaxAnalyzer() { ... }
public void StartSemanticMap() { ... }
public void StartEmotionGraph() { ... }
}
📞 问题排查
常见问题
Q: 进入状态后看不到界面?
A: 检查 Analysis View 是否激活,相机是否正确注册
Q: Yarn 命令不工作?
A: 检查 LanguageAnalysisManager 是否注册到 SystemDic
Q: 状态切换失败?
A: 检查 FixStateMachine 是否存在,查看 Console 日志
Q: 相机不切换?
A: 检查 CameraEnum 是否添加了新枚举值
🎉 总结
通过这次重构:
- ✅ 职责清晰 - Expression 和 LanguageAnalysis 完全分离
- ✅ 易于测试 - 可以独立进入语言分析状态测试
- ✅ 符合规范 - 使用 FixStateMachine 统一管理
- ✅ 易于扩展 - 未来可添加更多分析模式
- ✅ 代码质量 - 更清晰的架构和命名
现在你可以通过 <<enter_language_analysis>> 独立测试语言分析系统了! 🚀