3.9 KiB
3.9 KiB
EditorTools
模块概述
EditorTools 是框架的编辑器侧配套,覆盖 Inspector、自定义窗口、配置工具与代码生成流程,目的是降低模块接入与排查成本。
与 UI 最相关的部分是:
UISettingEditorWindowUIGenerateQuickUIScriptGeneratorHelperUIGenerateConfiguration
它们共同组成了 UIHolder 自动生成工作流。
快速开始
UI 绑定工具的基本使用流程
- 打开 UI 生成配置窗口,配置 UI 规则
- 把 UI 预制体放在配置的
UIPrefabRootPath目录下 - 按命名规范布置需要绑定的节点
- 选中 UI 预制体根节点
- 执行菜单
GameObject/UI生成绑定 - 等待脚本编译完成
- 生成器自动把
XXXHolder挂回预制体,并回填控件字段
UIHolder 自动生成说明
1. UIHolder 的定位
在本框架中:
UIHolder指的是继承自UIHolderObjectBase的绑定类- 它主要用于保存控件引用和资源标签
- 它不是主要的业务逻辑承载类
推荐方式:
- 手写 Window / Widget 逻辑
- 自动生成 Holder 绑定类
2. 使用哪个工具生成
核心入口:
- 菜单:
GameObject/UI生成绑定
对应代码入口位于:
Packages/com.alicizax.unity.framework/Editor/UI/GenerateWindow/UIGenerateQuick.cs:1
当你执行该菜单时,生成器会:
- 检查当前选中的对象是否是 prefab
- 读取
UIGenerateConfiguration - 校验 prefab 是否位于允许的 UI 根路径下
- 分析节点名并推断组件类型
- 输出
UIHolder脚本 - 在脚本编译后自动挂到 prefab 上
- 自动把字段与节点/组件引用绑定完成
3. 命名规则如何影响生成
生成器会结合:
UIElementRegexConfigsComCheckSplitNameComCheckEndNameArrayComSplitName
来识别节点绑定信息。
例如默认配置会把:
Btn#Close@识别为按钮字段Text#Title@识别为文本字段Img#Icon@识别为图片字段
4. 生成结果是什么
生成出的 Holder 类通常:
- 继承
UIHolderObjectBase - 自动带有
UIResAttribute - 自动写入资源路径常量
- 自动生成字段与公开访问器
这使得 UI 逻辑层可以直接通过泛型 Holder 访问控件,而无需再手动查找。
相关工具与职责
UISettingEditorWindow
作用:
- 维护 UI 生成配置
- 配置输出目录、命名空间、Prefab 根路径、资源加载方式
UIGenerateQuick
作用:
- 提供快速菜单入口
- 校验当前对象是否可生成
UIScriptGeneratorHelper
作用:
- 扫描节点
- 推断字段名和组件类型
- 生成代码
- 在脚本重载后自动挂载脚本并绑定字段
UIGenerateConfiguration
作用:
- 保存生成规则与路径设置
- 支持不同项目或不同目录使用不同配置
使用示例
// 推荐流程:
// 1. 设计 InventoryItem.prefab
// 2. 选中 prefab 根节点
// 3. 执行 “GameObject/UI生成绑定”
// 4. 得到 InventoryItemHolder : UIHolderObjectBase
// 5. 在业务代码中编写:
// public sealed class InventoryItemWidget : UIWidget<InventoryItemHolder> { ... }
最佳实践
- 把 UI 生成规则纳入项目模板,避免每个模块自行定义一套命名方式
- Holder 文件视为“生成产物”,不要手工长期维护
- 如果修改了 prefab 绑定节点,重新执行一次生成工具
- 逻辑类和生成类分离,减少合并冲突
常见错误
预制体不在配置的 UI 根路径下
- 现象:执行生成工具无结果
- 原因:
UIGenerateQuick.CheckCanGenerate校验失败
修改了预制体但没重新生成 Holder
- 现象:字段缺失或控件引用错误
- 处理:重新执行
GameObject/UI生成绑定
手动改了生成类名称或命名空间
- 现象:逻辑类泛型类型失配
- 处理:尽量不要手改生成文件,必要时同步更新生成配置与逻辑类引用