由UObject派生自定义资源类。
UCLASS(BlueprintType)
class UUserDefinedAsset : public UObject
{
GENERATED_UCLASS_BODY()
}
将该资源类放入运行时模块代码中。
添加资源类型动作类,作为编辑器入口,即编辑器中双击资源时的动作,及显示名称等。
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());
}
添加并编译工程后,可在编辑器中查看到自定义资源的创建入口,如下。
开发者可根据项目需要从UObject中派生出自己的资源类。
为了让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: 创建资源的条件.
同样,该类需要被添加至编辑器模块中。