UnrealEngine创建自定义资产类型

虚幻大学 xuhss 352℃ 0评论

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

导语

这篇文章记录了将UObject实例保存在Asset文件的方法,用这个方法可以将自定义的UObject数据序列化保存到文件,可以用于自定义UE资源类型。

创建UObject类

这一步比较简单,按照正常的方式创建C++类即可。

在这里我创建一个简单的UCustomAsset派生自UObject,包含一个Value字段作为演示。

UCLASS()
class LEARNUI\_API UCustomAsset final : public UObject
{
    GENERATED\_BODY()
public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    FString Value;
};

创建Asset

这一步是为了在Content窗口中添加右键菜单,像创建其他Asset一样快速创建CustomAsset。主要分为两步,创建对应的Factory和TypeAction类。

创建MyDataFactory

MyDataFactory中包含了具体的生成UObject实例的实现,我们接下来创建的Asset是由Factory实例化出来的。

UCLASS()
class LEARNUIEDITOR\_API UMyDataFactory final : public UFactory
{
    GENERATED\_BODY()
public:
    UMyDataFactory(){
        // 指定是否可以通过菜单来创建
        bCreateNew = true;
        // 创建Asset之后是否自动打开编辑
        bEditAfterNew = true;
        // 指定支持的类型
        SupportedClass = UMyData::StaticClass();
    }
    // 重载FactoryCreateNew方法,创建UMyData实例
    virtual UObject* FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override{
        return NewObject(InParent, InName, Flags);
 }
};

创建MyDataTypeAction

FMyDataTypeAction定义了Asset的显示名称、类型、显示颜色和所在分类。

// 至少需要重载以下四个方法
class FMyDataTypeAction final : public FAssetTypeActions_Base
{
public:
    virtual FText GetName() const override;
    virtual UClass* GetSupportedClass() const override;
    virtual FColor GetTypeColor() const override;
    virtual uint32 GetCategories() override;
};

以上代码中,GetCategories可以返回引擎中已经注册的Category,也可以使用以下代码注册自己的Category。

Category = FAssetToolsModule::GetModule().Get().RegisterAdvancedAssetCategory(FName("Custom"), FText::FromString("Custom"));

需要使用FAssetToolsModule注册FMyDataTypeAction以使其生效。

IAssetTools& AssetTool = FAssetToolsModule::GetModule().Get();

// 创建TypeAction实例并存储起来,方便在合适的时候调用UnregisterAssetTypeActions反注册
AssetTypeActions.Emplace(MakeShared());

for (TSharedPtr AssetType : AssetTypeActions)
{
 AssetTool.RegisterAssetTypeActions(AssetType.ToSharedRef());
}

效果

在ContentBrowser的Add/Import菜单中,可以看到自定义的MyData类型。

08b5e2875e2e7f172ceda148bdda032d - UnrealEngine创建自定义资产类型
创建完成后,双击打开编辑窗口,可以修改UProperty字段的值。

b92282528e70d2cd281359bab8eef27e - UnrealEngine创建自定义资产类型

转载请注明:xuhss » UnrealEngine创建自定义资产类型

喜欢 (6)

您必须 登录 才能发表评论!