AlicizaX/Client/Assets/Books/Framework/Editor/EditorTools.md
2026-04-01 13:20:06 +08:00

3.9 KiB
Raw Permalink Blame History

EditorTools

模块概述

EditorTools 是框架的编辑器侧配套,覆盖 Inspector、自定义窗口、配置工具与代码生成流程目的是降低模块接入与排查成本。

与 UI 最相关的部分是:

  • UISettingEditorWindow
  • UIGenerateQuick
  • UIScriptGeneratorHelper
  • UIGenerateConfiguration

它们共同组成了 UIHolder 自动生成工作流

快速开始

UI 绑定工具的基本使用流程

  1. 打开 UI 生成配置窗口,配置 UI 规则
  2. 把 UI 预制体放在配置的 UIPrefabRootPath 目录下
  3. 按命名规范布置需要绑定的节点
  4. 选中 UI 预制体根节点
  5. 执行菜单 GameObject/UI生成绑定
  6. 等待脚本编译完成
  7. 生成器自动把 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. 命名规则如何影响生成

生成器会结合:

  • UIElementRegexConfigs
  • ComCheckSplitName
  • ComCheckEndName
  • ArrayComSplitName

来识别节点绑定信息。

例如默认配置会把:

  • 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生成绑定

手动改了生成类名称或命名空间

  • 现象:逻辑类泛型类型失配
  • 处理:尽量不要手改生成文件,必要时同步更新生成配置与逻辑类引用