UE4自定义资源编辑器开发-资源入口

UE4自定义资源编辑器开发-资源入口

1 资源类定义


UObject派生自定义资源类。

UCLASS(BlueprintType)
class UUserDefinedAsset : public UObject
{
	GENERATED_UCLASS_BODY()
}

将该资源类放入运行时模块代码中。


2 资源类入口动作定义


添加资源类型动作类,作为编辑器入口,即编辑器中双击资源时的动作,及显示名称等。

class FAssetTypeActions_UserDefinedAsset : public FAssetTypeActions_Base
{
	public:
		virtual FText GetName() const override;
		virtual FColor GetTypeColor() const override;
		virtual UClass* GetSupportedClass() const override;
		virtual void OpenAssetEditor(const TArray<UObject*>& InObjects, TSharedPtr<class IToolkitHost> EditWithinLevelEditor = TSharedPtr<IToolkitHost>()) override;
		virtual uint32 GetCategories() override;
};

  • GetName() : 返回编辑器中显示名称

  • GetTypeColor() : 返回此类型资源在编辑器中的显示颜色

  • GetSupportedClass() : 返回对应的自定义资源类,取第1节中所定义的类型

  • OpenAssetEditor(): 资源编辑器入口

  • GetCategories(): 创建该资源时显示的分类,即编辑器资源窗口中右键创建资源时菜单的分类

添加该类至编辑器模块,并在StartupModule函数中注册该类型。

void FXXX_ModuleEidtorModule::StartupModule()
{
	...
	//Register
	IAssetTools& AssetToolsModule =  FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools").Get();
	//AssetCategory
	AssetCategoryBit = AssetToolsModule.RegisterAdvancedAssetCategory(FName(TEXT("UserDefinedAsset")), LOCTEXT("UserDefinedAssetCategory", "User Defined Asset");
	TSharedPtr<FAssetTypeActions_UserDefinedAsset> AssetTypeAction = MakeShareable(new FAssetTypeActions_UserDefinedAsset(AssetCategoryBit));
	AssetToolsModule.RegisterAssetTypeActions(AssetTypeAction.ToSharedRef());
}

添加并编译工程后,可在编辑器中查看到自定义资源的创建入口,如下。

AssetTypeAction

开发者可根据项目需要从UObject中派生出自己的资源类。


3 资源工厂类


为了让UE4识别并创建自定义资源类,开发者需要添加对应的工厂类,如下。

UCLASS()
class UUserDefinedAssetFactory : public UFactory
{
	GENERATED_UCLASS_BODY()
	// UFactory interface
	virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override;
	virtual bool CanCreateNew() const override;
	// End of UFactory interface
};

UObject* UTestFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn)
{
	check(Class->IsChildOf(UUserDefinedAsset::StaticClass()));
	return NewObject<UUserDefinedAsset>(InParent, Class, Name, Flags);;
}
  • FactoryCreateNew: 创建用户自定义类型资源.

  • CanCreateNew: 创建资源的条件.

同样,该类需要被添加至编辑器模块中。

链接




Tags: UE4 Editor Vistied:
Share: Twitter Facebook LinkedIn