Toolbar 工具栏
Toolbar 扩展把常用编辑器命令注入 Unity 主工具栏。显示内容由 ToolBarBtnCfg 驱动,命令通过“类型全名 + 静态方法名”绑定;每帧绘制只使用域重载时建立的缓存,不重复扫描配置或执行反射。
Demo 配置资产:
text
Assets/SuperCore/Editor/Cfg_ToolBarBtn.asset在 SuperCoreKit 的 EditorConfig / ToolBarBtn 页面配置。项目可以存在多份 ToolBarBtnCfg,Registry 会全部收集并合并,适合业务包增加自己的工具按钮。




刷新后,配置会映射到 Unity 主工具栏:

子功能
缓存与刷新
ToolbarButtonRegistry 的 [InitializeOnLoad] 静态构造只订阅左右 Toolbar 绘制事件,不读取配置资产。配置读取发生在:
- Domain Reload 后、资产导入完成时,由统一
ConfigCollectorPostprocessor触发只读缓存重建。 - 用户在 ToolBarBtnCfg 页面点击“刷新工具栏”时立即重建。
缓存内容包括 GUIContent、文字宽度、命令委托和 Dropdown 菜单。这样 Toolbar 的 OnGUI 不需要反复做 AssetDatabase.FindAssets 或 MethodInfo 查找。
设计思路
- Group 决定位置,Item 决定可见功能,命令类承载入口逻辑。
- 配置只保存字符串绑定,不序列化委托或 EditorWindow 实例。
- 复杂逻辑放在窗口或独立工具类;Toolbar 命令只负责确认与转发。
- 配置与命令解耦后,业务可以在不修改 Toolbar 注入代码的情况下组合按钮。
注意事项
- 类名、命名空间或方法名变更后,要同步配置并刷新缓存。
- 方法不能有参数或返回值;异步/复杂任务应由方法启动独立流程。
- Dropdown 使用 Unity GenericMenu,不能为子项自定义图标。
- Unity 主工具栏注入依赖内部 UI 结构,大版本升级后需要验证
ToolbarExpand。 - 配置多个同侧、相同 Order 的 Group 时顺序不应依赖扫描结果;建议使用明确、不同的 Order。
- 不在 Toolbar OnGUI 中扫描资产、创建 GUIStyle 或执行耗时工作。
