ED08.FAssetEditorToolkit|自定义资源编辑器
大约 5 分钟
FAssetEditorToolkit
一个封装了“UE 编辑器中资产编辑器所需基础功能(如菜单、工具栏、面板注册、布局、命令系统)的一套可扩展基类框架”。
virtual EAssetCommandResult OpenAssets(const FAssetOpenArgs& OpenArgs) const override;
EAssetCommandResult UAssetDefinitionDefault::OpenAssets(const FAssetOpenArgs& OpenArgs) const
{
if (GetAssetOpenSupport(FAssetOpenSupportArgs(OpenArgs.OpenMethod)).IsSupported)
{
FSimpleAssetEditor::CreateEditor(EToolkitMode::Standalone, OpenArgs.ToolkitHost, OpenArgs.LoadObjects<UObject>());
return EAssetCommandResult::Handled;
}
return EAssetCommandResult::Unhandled;
}
1. FAssetEditorToolkit
(基础类)
- 提供资源编辑器的核心结构:ToolKit、Tab管理、菜单扩展、工具栏扩展等
- 支持基本的 Tab 注册、布局初始化、Undo/Redo 等编辑器通用逻辑
- 是所有资源编辑器的基础类,但本身不带复杂业务逻辑
class FAssetEditorToolkit : public FBaseToolkit, public IAssetEditor
2. FWorkflowCentricApplication
(工作流驱动型编辑器)
面向复杂的、多面板、多模式切换的编辑器(如蓝图编辑器)
class FWorkflowCentricApplication : public FAssetEditorToolkit
- 支持模式切换(Mode switching)
- 比如“图表模式”、“调试模式”、“详情模式”
- 支持左侧的**“模式切换 Tab 面板”**
- 内置
FApplicationMode
机制,可动态定义工作流
3. FSimpleAssetEditorToolkit
(轻量级编辑器)
class FSimpleAssetEditorToolkit : public FAssetEditorToolkit
- 不使用复杂的 ApplicationMode 和 Tab 分布结构
- 用于结构简单的编辑器,如只包含一个 Details 面板或 Preview 视图
- 通常通过创建一个简单布局,快速搭建 UI
基础的编辑器面板

区域 | 名称 | 构建方式 |
---|---|---|
顶部菜单栏 | Menu Bar | FMenuBarBuilder |
工具栏 | Tool Bar | FToolBarBuilder |
主要区域 | 中心面板 | FTabManager + DockTab |
底部栏 | Status Bar | SStatusBar + FStatusBarItem |
使用方法
1. 引入模块
PublicDependencyModuleNames.AddRange( new string[] {"UnrealEd",});
2. 创建 FAssetEditorToolkit
//抽象
class ISuperComboGraphBlueprintEditor :
public FWorkflowCentricApplication{};
//具体派生实现类
class FSuperComboGraphAssetsEditor :
public ISuperComboGraphBlueprintEditor, public FGCObject,
public FNotifyHook, public FEditorUndoClient{ };
3. 基础接口
//返回该编辑器工具包的唯一名称(内部识别名)。
virtual FName GetToolkitFName() const override = 0; // Must implement in derived class!
//返回该工具包的显示名称(用于标签栏 / 窗口标题等 UI 中)。
virtual FText GetBaseToolkitName() const override = 0; // Must implement in derived class!
//返回当该编辑器以 World-Centric 模式(嵌入主编辑器窗口中)打开时,Tab 标签的前缀。
virtual FString GetWorldCentricTabPrefix() const override = 0; // Must implement in derived class!
World-Centric 模式
模式 | 外观描述 |
---|---|
World-Centric | 编辑器嵌入在主编辑器窗口,作为一个 Tab 显示 |
Standalone | 编辑器作为一个新的独立窗口单独弹出 |
#pragma once
#include "CoreMinimal.h"
#include "ISuperComboGraphBlueprintEditor.h"
class USuperComboGraph;
/**
* SuperComboGraphAssetsEditor(自定义资产编辑器)
*/
class FSuperComboGraphAssetsEditor : public ISuperComboGraphBlueprintEditor,
{
public :
FSuperComboGraphAssetsEditor();
virtual void RegisterTabSpawners(const TSharedRef<class FTabManager>& TabManager) override;
virtual void UnregisterTabSpawners(const TSharedRef<class FTabManager>& TabManager) override;
/** 初始化SuperComboGraphAssetsEditor */
void InitSuperComboGraphAssetsEditor(const EToolkitMode::Type Mode, const TSharedPtr<class IToolkitHost>& InitToolkitHost,
USuperComboGraph* ObjectToEdit);
/** IToolkit interface */
virtual FName GetToolkitFName() const override;
virtual FText GetBaseToolkitName() const override;
virtual FText GetToolkitName() const override;
virtual FText GetToolkitToolTipText() const override;
virtual FString GetWorldCentricTabPrefix() const override;
virtual FLinearColor GetWorldCentricTabColorScale() const override;
virtual bool IsPrimaryEditor() const override { return true; }
virtual bool IsSimpleAssetEditor() const override { return true; }
virtual FName GetEditingAssetTypeName() const override;
};
接口 / 基类 | 作用 |
---|---|
ISuperComboGraphBlueprintEditor | 自定义的编辑器接口,你定义的业务抽象接口,可能继承自 FAssetEditorToolkit 或 FWorkflowCentricApplication |
FGCObject | 用于GC(垃圾回收)引用保护,确保编辑器持有的 UObject(如 Graph、Asset)不被误删 |
FNotifyHook | 接收 Details 面板中的变量编辑变更通知,用于响应属性修改 |
FEditorUndoClient | 实现 Undo / Redo 逻辑,自动与 UE 编辑器 Undo 系统联动 |
功能 | 说明 |
---|---|
初始化编辑器 | InitAssetEditor() 设置 App 名、布局、菜单、工具栏等 |
菜单栏与工具栏的生成与扩展 | GenerateToolbar() , FillDefaultFileMenuCommands() , AddToolbarExtender() 等 |
Tab 注册与管理 | RegisterTabSpawners() , RestoreFromLayout() ,支持多 Tab 布局 |
状态栏支持 | RegisterDrawer() 注册底部的 drawer 面板 |
界面自定义 | 提供 Overlay 添加/移除、Toolbar widget 添加等函数 |
拖拽事件处理 | OnViewportDrop() 系列可覆盖函数 |
编辑器上下文与元信息管理 | 如标题 GetToolkitName() 、Tooltip、编辑对象 GetObjectsCurrentlyBeingEdited() |
工具集成支持 | 支持 Hosting 其他 Toolkit,如 Ed Mode Toolkit(OnToolkitHostingStarted() ) |
EditorMode 支持 | 提供 FEditorModeTools& GetEditorModeManager() |