# 配置表联动关系查看器 一个用于查看 Unity 项目中配置表联动关系的编辑器工具,支持跨项目复用。 ## 功能特性 - **配置表列表**:搜索过滤、存在性检测、支持 TXT 文件 - **联动关系查看**:正向关联和反向引用查询,支持跳转到关联表 - **数据格式可视化**:自动解析 item_id_num、id_lv_num 等复合格式 - **Excel 操作**:一键打开配置表,批量打开关联表 - **导出配置**:批量导出为 JSON 和 C# 代码 - **清理空行**:自动检测并删除 Excel 中 id 列为空的垃圾数据行,支持 sharedStrings 解析 - **跨项目适配**:基于 `ConfigLinkData.json`,一键生成骨架并由 AI 补全 ## 安装 1. 复制 `ConfigLinkViewer` 文件夹到目标项目的 `Assets/Editor/` 下 2. 或使用 Git 子模块: ```bash git submodule add Assets/Editor/ConfigLinkViewer ``` ## 快速上手 Unity 编辑器菜单:`Tools → 配置表联动查看器` ### 按钮说明 **日常数据维护:** | 按钮 | 说明 | |------|------| | 清理Excel空行 | 扫描 Excel 文件夹,删除 id 列为空或非数字的垃圾数据行 | | 导出配置 | 将 Excel 批量导出为游戏运行时的 JSON 和 C# 代码 | | 打开表格 | 打开当前选中表的 Excel 文件 | | 批量打开关联表 | 打开所有关联的配置表 | **查看器配置(首次使用或跨项目时):** | 按钮 | 说明 | |------|------| | 生成配置 | 从 Excel 文件夹扫描生成 `ConfigLinkData.json` 骨架文件(仅表名) | | 补全配置 | 运行 Python 脚本自动识别字段引用关系,补全 `ConfigLinkData.json` | | 刷新 | 重新加载 `ConfigLinkData.json` | | 显示反向引用 | 查看哪些表引用了当前选中的表 | ## 使用流程 ### 流程一:首次配置 / 跨项目使用 将本工具引入新项目时,需要初始化 `ConfigLinkData.json`: 1. 点击"选择文件夹",设置 Excel 文件夹路径 2. 点击 **"生成配置"** — 扫描 Excel 文件夹,生成骨架(只有表名,没有引用关系) 3. 点击 **"补全配置"** — 运行 Python 脚本自动分析 config JSON,补全引用关系和中文名 4. 在左侧列表点击表名,查看联动关系是否准确 5. 如有遗漏或不准确,手动编辑 `ConfigLinkData.json` 后点击"刷新" ### 流程二:日常数据维护 策划修改 Excel 后,需要导出给程序使用: 1. 点击 **"清理Excel空行"** — 清除 Excel 中 id 列为空的垃圾行 2. 点击 **"导出配置"** — 将 Excel 批量导出为 JSON 和 C# 代码 ### 流程三:查看联动关系 在左侧列表选中一张表,右侧面板会显示: - 正向关联:该表引用了哪些其他表 - 反向引用(勾选"显示反向引用"):哪些表引用了该表 - 数据格式示例和说明 ## 数据格式说明 | 格式 | 示例 | 说明 | |------|------|------| | item_id_num | 1001_10_5 | 类型:1001, ID:10, 数量:5 | | type_id_num | 1001_10_5 | 类型:1001, ID:10, 数量:5 | | id_pos_lv | 100_1_30 | ID:100, 位置:1, 等级:30 | | id_lv_num | 100_30_5 | ID:100, 等级:30, 数量:5 | | id_lv_num_time | 100_30_5_120 | ID:100, 等级:30, 数量:5, 时间:120秒 | | buffid_lv | 5_3 | BuffID:5, 等级:3 | | rune_id_num | 10_2 | 符文ID:10, 数量:2 | | equip_id_num | 20_1 | 装备ID:20, 数量:1 | ## ConfigLinkData.json 格式 ```json { "tables": [ { "name": "item", "displayName": "道具表", "description": "道具基础配置", "fileExtension": ".xlsx", "relations": [ { "field": "rewards", "target": "monster", "targetField": "id", "format": "type_id_num", "description": "掉落奖励" } ] } ] } ``` | 字段 | 必填 | 说明 | |------|------|------| | name | 是 | 表名(对应 Excel 文件名,不含扩展名) | | displayName | 否 | 显示名称,不填则用 name | | description | 否 | 表描述 | | fileExtension | 否 | 文件扩展名,默认 `.xlsx`,可设为 `.txt` | | relations | 否 | 联动关系列表 | **relations 字段:** | 字段 | 必填 | 说明 | |------|------|------| | field | 是 | 当前表的字段名 | | target | 是 | 引用的目标表名 | | targetField | 否 | 目标表的字段名,默认 `id` | | format | 否 | 数据格式,如 `type_id_num` | | description | 否 | 关系描述 | ## 文件结构 ``` Assets/Editor/ConfigLinkViewer/ ├── ConfigLinkViewerWindow.cs # Unity 编辑器窗口界面 + 回调注册容器 ├── ConfigLinkDatabase.cs # 配置表数据、路径管理、格式模板(数据驱动) ├── generate_config_link_data.py # Python 脚本,支持命令行参数,自动识别字段引用关系 ├── ConfigLinkData.json # 配置文件(生成骨架后由 AI 补全) ├── settings.json # 项目路径 + 格式模板配置(零代码扩展) ├── table_info.json # 配置表中文名/描述(Python 和 C# 共用) └── README.md # 使用文档 ``` ## 注意事项 1. Excel 文件命名必须与配置表名一致(如 `enemy.xlsx`) 2. 路径设置后自动保存到 EditorUserSettings(多项目隔离,互不覆盖) 3. 清理空行会直接修改 Excel 源文件,建议操作前确认已提交到版本控制 4. 清理空行支持 Excel 共享字符串(sharedStrings)解析,可正确处理 `t="s"` 类型单元格 5. 补全配置功能需要 Python 环境,脚本位于 `generate_config_link_data.py` 6. 编辑 `ConfigLinkData.json` 后点击"刷新"按钮重新加载 ## 更新日志 ### v1.0.0 - 配置表列表展示,支持搜索过滤和存在性检测 - 联动关系查看,支持正向关联和反向引用查询 - 数据格式可视化,自动解析并显示格式示例 - 支持 TXT 文件识别 - 左右面板自适应布局,窗口默认 900×600 - 一键打开 Excel 文件,支持批量打开关联表 - Excel 文件夹路径设置,自动保存到 PlayerPrefs - 跨项目适配,点击[生成配置]扫描 Excel 文件夹生成骨架,AI 补全中文名和关联关系 - "导出配置"按钮,一键将 Excel 批量导出为 JSON 和 C# 代码 - "清理Excel空行"功能,自动检测并删除 Excel 中 id 列为空的垃圾数据行 - "AI补全配置"按钮,运行 Python 脚本自动识别字段引用关系 ### v1.0.1 - "AI补全配置"按钮更名为"补全配置",按钮宽度和提示文案同步调整 - 修复清理 Excel 空行时未正确解析共享字符串(sharedStrings)导致部分空行清理不干净的问题 - 新增 `t="s"`(共享字符串引用)和 `t="inlineStr"`(内联字符串)两种单元格类型解析 - 提取 `GetCellActualValue()` 方法,统一单元格值解析逻辑 - README 全面优化:精简功能特性描述、重组文档结构、新增查漏补缺指南和二次校验 Prompt ### v2.0.1 **UI 优化:** - 调整 ASCII 艺术画样式,支持自定义图案替换 - 优化艺术画显示尺寸,支持更宽更矮的布局 - 修复文字颜色显示问题,确保 ASCII 艺术画正确渲染 ### v2.0.0 — 零依赖重构(大版本) **核心目标:** 拖入任意 Unity 项目即用,零外部依赖,配置驱动。 **破坏性变更:** - 移除所有 `MFrame` 直接引用,编译不再依赖任何外部框架 - Excel 路径存储从 `PlayerPrefs` 迁移至 `EditorUserSettings`(自动多项目隔离,旧路径需重新设置) - Python 脚本入口改为 `argparse` 参数化调用(`--config-dir` / `--output` / `--table-info`) **新增文件:** - `settings.json` — 项目路径 + 格式模板配置,新增格式类型只需改 JSON,重启即生效 - `table_info.json` — 78 张配置表的中文名/描述,Python 和 C# 共用同一份数据源 **UI 重构:** - 窗口拆分为「查看」和「配置」两个标签页,日常操作和初始化设置分离 - 「查看」页顶部精简为 3 个按钮(清理Excel空行、导出配置、刷新),按钮大小和垂直对齐统一 - 「配置」页集中展示路径设置、Excel 文件夹、配置数据生成(生成/补全) - 配置标签页底部展示洛天依 ASCII 彩蛋 **框架自动适配:** - 新增 `ConfigLinkViewerAutoSetup`(`[InitializeOnLoad]`),编辑器启动时通过**反射**自动检测项目中的 MFrame 框架 - 检测到 `MFrame.ConfigDeal.ExportConfig` → 自动绑定「导出配置」回调 - 检测到 `MFrame.PathConf` + `MFrame.ConfigEditorCf` → 自动绑定 Excel 路径回退 - 未检测到框架 → 静默跳过,用户无需任何配置,路径通过 UI 手动设置即可 **改动详情:** - `ConfigLinkViewerCallbacks` 静态回调类保留,支持外部手动注册覆盖自动检测结果 - `ConfigLinkDatabase.cs` — 格式解析从 switch-case 改为反射加载 `settings.json` 中的 `FormatTemplatesWrapper`,零代码扩展 - `ConfigLinkDatabase.cs` — `MarkExistingTables` / `IsTableExistInConfigFolder` 的配置路径改为从 `settings.json` 的 `configFolderPath` 读取 - `ConfigLinkViewerWindow.cs` — Python 调用侧同步传入 `--config-dir` 和 `--table-info` 参数 - `generate_config_link_data.py` — 移除硬编码 `TABLE_INFO` 字典,改为从 `table_info.json` 加载 - 清理 `__pycache__/` 缓存目录和已完成的优化方案文档 ## 许可证 MIT License