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

7.6 KiB
Raw Blame History

记忆解密器 - 最新改动说明

📅 更新日期:2025-12-04

🔄 主要改动

最新更新:使用 [YarnCommand] 特性注册

改动内容

  • MemoryDecryptorYarnCommandsMonoBehaviour 改为静态类
  • 使用 [YarnCommand] 特性自动注册命令
  • 无需添加到场景中,无需手动管理生命周期

代码变化

// 旧方式 - MonoBehaviour
public class MemoryDecryptorYarnCommands : MonoBehaviour
{
    private void Awake() { RegisterCommands(); }
    private void OnDestroy() { RemoveCommands(); }
}

// 新方式 - 静态类 + [YarnCommand]
public static class MemoryDecryptorYarnCommands
{
    [YarnCommand("memory_decryptor_start")]
    public static void StartMemoryDecryptor(string completionNodeName = "") { ... }
}

优点

  • 无需添加组件到场景
  • 自动管理生命周期
  • 代码更简洁(从 199 行减少到 124 行)
  • LanguageYarnCommand 保持一致的风格

🔄 之前的改动

1. DialogController 集成

改动内容

  • 所有 DialogueRunner 引用现在通过 DialogController.Instance 自动获取
  • 移除了手动配置 DialogueRunner 的需求

影响的文件

  • MemoryDecryptorYarnCommands.cs
  • MemoryDecryptorMode.cs

代码变化

// 旧方式
[SerializeField] private DialogueRunner dialogueRunner;

// 新方式
private DialogueRunner dialogueRunner;

private void Awake()
{
    // 通过 DialogController 获取
    if (DialogController.Instance != null)
    {
        dialogueRunner = DialogController.Instance.GetComponentInChildren<DialogueRunner>();
    }
}

优点

  • 符合项目架构规范
  • 无需手动配置,减少人为错误
  • 统一的对话系统访问方式

2. Inspector 面板简化

改动内容

  • 隐藏了所有不需要手动配置的字段
  • 只保留必须手动设置的 UI 组件引用和参数
  • 内部组件引用改为自动查找

影响的文件

  • ExpressionManager.cs
  • MemoryDecryptorMode.cs
  • MemoryDecryptorRenderer.cs
  • MemoryDecryptorInputHandler.cs
  • MemoryDecryptorYarnCommands.cs

详细变化

ExpressionManager.cs

// 旧方式 - 需要手动配置
[SerializeField] private LanguageParticleManager particleManager;
[SerializeField] private MemoryDecryptorMode memoryDecryptorMode;

// 新方式 - 自动查找
private LanguageParticleManager particleManager;
private MemoryDecryptorMode memoryDecryptorMode;

MemoryDecryptorMode.cs

// 只保留必须手动配置的
[Header("配置")]
[SerializeField] private MemoryDecryptorConfig config;

// 其他组件自动查找
private MemoryDecryptorRenderer renderer;
private DialogueRunner dialogueRunner;

MemoryDecryptorRenderer.cs

// 必须手动配置的 UI 组件
[Header("UI 组件(必须配置)")]
[SerializeField] private RectTransform gridContainer;
[SerializeField] private RectTransform decoderStripContainer;
[SerializeField] private TMP_Text frequencyDisplay;
[SerializeField] private TMP_Text logText;
[SerializeField] private RectTransform signalBar;

// 不需要配置的内部变量
private GameObject gridCellPrefab;
private GameObject decoderStripPrefab;
private Material cellMaterial;

MemoryDecryptorInputHandler.cs

// 必须手动配置的 UI 组件
[Header("UI 组件(必须配置)")]
[SerializeField] private RectTransform gridContainer;
[SerializeField] private Slider frequencySlider;
[SerializeField] private Button filterButton;
[SerializeField] private Button verifyButton;

// 自动查找的组件
private MemoryDecryptorMode mode;
private MemoryDecryptorRenderer renderer;
private GameObject decoderStrip;

MemoryDecryptorYarnCommands.cs

// 完全无需手动配置
private DialogueRunner dialogueRunner;
private ExpressionManager expressionManager;

优点

  • Inspector 面板更清爽,只显示必要的配置项
  • 减少配置错误的可能性
  • 提高易用性,新手更容易上手
  • 遵循"约定优于配置"的原则

📋 配置对比

旧配置方式(配置项多)

MemoryDecryptorMode
├── Config: [必须配置]
├── Renderer: [必须配置]
└── Dialogue Runner: [必须配置]

MemoryDecryptorRenderer
├── Grid Container: [必须配置]
├── Decoder Strip Container: [必须配置]
├── Frequency Display: [必须配置]
├── Log Text: [必须配置]
├── Signal Bar: [必须配置]
├── Grid Cell Prefab: [可选]
├── Decoder Strip Prefab: [可选]
└── Cell Material: [可选]

MemoryDecryptorInputHandler
├── Mode: [必须配置]
├── Renderer: [必须配置]
├── Decoder Strip: [可选]
├── Frequency Slider: [必须配置]
├── Filter Button: [必须配置]
├── Verify Button: [必须配置]
├── Grid Container: [必须配置]
├── Grid Cell Size: [必须配置]
└── Grid Cell Gap: [必须配置]

MemoryDecryptorYarnCommands
└── Dialogue Runner: [必须配置]

ExpressionManager
├── Particle Manager: [必须配置]
└── Memory Decryptor Mode: [必须配置]

新配置方式(配置项少)

MemoryDecryptorMode
└── Config: [必须配置] ✅

MemoryDecryptorRenderer
├── Grid Container: [必须配置] ✅
├── Decoder Strip Container: [必须配置] ✅
├── Frequency Display: [必须配置] ✅
├── Log Text: [必须配置] ✅
└── Signal Bar: [必须配置] ✅

MemoryDecryptorInputHandler
├── Grid Container: [必须配置] ✅
├── Frequency Slider: [必须配置] ✅
├── Filter Button: [必须配置] ✅
├── Verify Button: [必须配置] ✅
├── Grid Cell Size: [必须配置] ✅
└── Grid Cell Gap: [必须配置] ✅

MemoryDecryptorYarnCommands
└── (无需配置,全自动)🎉

ExpressionManager
└── Expression View: [必须配置] ✅

配置项减少:从 20+ 项减少到 12 项!


🎯 迁移指南

如果你已经在使用旧版本的记忆解密器:

步骤 1:清理旧引用

  1. 打开你的场景
  2. 选择 MemoryDecryptorYarnCommands
  3. 清空 Dialogue Runner 字段(它现在会自动获取)

步骤 2:清理 ExpressionManager

  1. 选择 ExpressionManager
  2. 清空 Particle ManagerMemory Decryptor Mode 字段
  3. 确保这些组件是 ExpressionManager 的子对象(会自动查找)

步骤 3:清理 MemoryDecryptorMode

  1. 选择 MemoryDecryptorMode
  2. 清空 RendererDialogue Runner 字段
  3. 保留 Config 配置

步骤 4:清理 MemoryDecryptorInputHandler

  1. 选择 MemoryDecryptorInputHandler
  2. 清空 ModeRendererDecoder Strip 字段
  3. 保留所有 UI 组件引用

步骤 5:测试

  1. 运行场景
  2. 确认所有功能正常
  3. 检查 Console 是否有错误信息

测试清单

  • MemoryDecryptorYarnCommands 能正常注册命令
  • Yarn 命令可以正常调用
  • 解密器界面正常显示
  • 频率滑块响应正常
  • 解码器条可以拖动
  • 匹配检测正常工作
  • 成功/失败节点正常跳转
  • 模式切换(粒子 ↔ 解密器)正常

📚 更新的文档

以下文档已同步更新:

  • README.md - 使用说明
  • QUICKSTART.md - 快速入门指南
  • IMPLEMENTATION_SUMMARY.md - 实现总结

🐛 已知问题

目前没有已知问题。


💡 未来改进

  1. 考虑添加自动配置向导
  2. 添加配置验证工具
  3. 提供预制件(Prefab)模板

如有问题,请查看相关文档或提交 Issue。