7.6 KiB
7.6 KiB
记忆解密器 - 最新改动说明
📅 更新日期:2025-12-04
🔄 主要改动
最新更新:使用 [YarnCommand] 特性注册
改动内容:
MemoryDecryptorYarnCommands从MonoBehaviour改为静态类- 使用
[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.csMemoryDecryptorMode.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.csMemoryDecryptorMode.csMemoryDecryptorRenderer.csMemoryDecryptorInputHandler.csMemoryDecryptorYarnCommands.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:清理旧引用
- 打开你的场景
- 选择
MemoryDecryptorYarnCommands - 清空
Dialogue Runner字段(它现在会自动获取)
步骤 2:清理 ExpressionManager
- 选择
ExpressionManager - 清空
Particle Manager和Memory Decryptor Mode字段 - 确保这些组件是
ExpressionManager的子对象(会自动查找)
步骤 3:清理 MemoryDecryptorMode
- 选择
MemoryDecryptorMode - 清空
Renderer和Dialogue Runner字段 - 保留
Config配置
步骤 4:清理 MemoryDecryptorInputHandler
- 选择
MemoryDecryptorInputHandler - 清空
Mode、Renderer、Decoder Strip字段 - 保留所有 UI 组件引用
步骤 5:测试
- 运行场景
- 确认所有功能正常
- 检查 Console 是否有错误信息
✅ 测试清单
MemoryDecryptorYarnCommands能正常注册命令- Yarn 命令可以正常调用
- 解密器界面正常显示
- 频率滑块响应正常
- 解码器条可以拖动
- 匹配检测正常工作
- 成功/失败节点正常跳转
- 模式切换(粒子 ↔ 解密器)正常
📚 更新的文档
以下文档已同步更新:
- ✅
README.md- 使用说明 - ✅
QUICKSTART.md- 快速入门指南 - ✅
IMPLEMENTATION_SUMMARY.md- 实现总结
🐛 已知问题
目前没有已知问题。
💡 未来改进
- 考虑添加自动配置向导
- 添加配置验证工具
- 提供预制件(Prefab)模板
如有问题,请查看相关文档或提交 Issue。