UE4自定义资源和编辑器(二):创建自定义编辑器

本文档详细介绍了如何在UE4中创建一个自定义编辑器FStateMachineEditor,用于编辑UStateMachine资源。内容包括编辑器类的创建、编辑模式的设定、细节面板页签工厂类的实现,以及在AssetTypeAction中初始化和打开资源的过程。通过创建编辑模式,定义布局和注册页签工厂,最终实现一个具有默认菜单栏、工具栏和细节面板的自定义编辑器。
摘要由CSDN通过智能技术生成

介绍

我们添加了一个UStateMachine的自定义资源,现在我们在创建一个FStateMachineEditor的编辑器类来编辑这个资源。UE4中任何的编辑器都是由一个个Tab(页签)组成,由编辑器中的TabManager管理。StateMachineEditor打开后会和蓝图编辑器类似,有默认的菜单栏和工具栏、有图表和细节面板。这里菜单栏、工具栏、图表、细节面板都是页签。
我们先创建只有默认菜单栏、工具栏、和细节面板的编辑器,后面再详细介绍图表页签的创建。
介绍

创建编辑器类

首先创建一个FStateMachineEditor编辑器类,用于编辑StateMachine资源类。FStateMachineEditor从FWorkflowCentricApplication继承则可以切换编辑模式,结构会更加清晰,建议都从FWorkflowCentricApplication继承。编辑器类额外添加了一个DocumentManager变量,DocumentManager可以替换TabManager可以用于管理所有的图表页签,同蓝图编辑器类似。

  • StatMachineEditor.h:
class STATEMACHINEEDITOR_API FStateMachineEditor : public FWorkflowCentricApplication, public FNotifyHook, public FEditorUndoClient
{
   
public:
	FStateMachineEditor();
	virtual ~FStateMachineEditor();	
	//初始化编辑器函数
	void InitStateMachineEditor(const EToolkitMode::Type Mode, const TSharedPtr< class IToolkitHost >& InitToolkitHost, UStateMachine* InStateMachine);

public:
	//~ Begin FWorkflowCentricApplication Interface
	virtual void RegisterTabSpawners(const TSharedRef<class FTabManager>& InTabManager) override;
	//~ End FWorkflowCentricApplication Interface

	//~ Begin IToolkit Interface
	virtual FName GetToolkitFName() const override;
	virtual FText GetBaseToolkitName() const override;
	virtual FString GetWorldCentricTabPrefix() const override;
	virtual FLinearColor GetWorldCentricTabColorScale() const override;
	//~ End IToolkit Interface

	virtual void RegisterToolbarTab(const TSharedRef<class FTabManager>& InTabManager);
	virtual void InvokeStateMachineGraphTab(); //打开图表Tab,预留
	UStateMachine* GetStateMachine() {
    return StateMachine.Get(); }
	TSharedPtr<FDocumentTracker> GetDocumentManager() {
    return DocumentManager; }

private:
	TWeakObjectPtr<UStateMachine> StateMachine;
	TSharedPtr<FDocumentTracker> DocumentManager;
};
  • StatMachineEditor.cpp:
void FStateMachineEditor::InitStateMachineEditor(const EToolkitMode::Type Mode, const TSharedPtr<class IToolkitHost>& InitToolkitHost, UStateMachine* InStateMachine)
{
   
	StateMachine = InStateMachine;
	// Initialize the asset editor and spawn nothing (dummy layout)
	const TSharedRef<FTabManager::FLayout> DummyLayout = FTabManager::NewLayout("NullLayout")->AddArea(FTabManager::NewPrimaryArea());
	InitAssetEditor(Mode, InitToolkitHost, FName("StateMachineEditorApp"), DummyLayout, tru
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值