Files
aibis-dream/Assets/Scripts/MiniGame/HuoShan/Language/LanguageAnalysis/REFACTORING_SUMMARY.md
T
2025-12-04 20:38:02 +08:00

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 是否添加了新枚举值

🎉 总结

通过这次重构:

  1. 职责清晰 - Expression 和 LanguageAnalysis 完全分离
  2. 易于测试 - 可以独立进入语言分析状态测试
  3. 符合规范 - 使用 FixStateMachine 统一管理
  4. 易于扩展 - 未来可添加更多分析模式
  5. 代码质量 - 更清晰的架构和命名

现在你可以通过 <<enter_language_analysis>> 独立测试语言分析系统了! 🚀