如何使用UnrealEngine自定义创建资产类型?

2026-05-19 22:341阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计704个文字,预计阅读时间需要3分钟。

如何使用UnrealEngine自定义创建资产类型?

导语:本文记录了将UObject实例保存到Asset文件的方法,通过这种方法可以将自定义的UObject数据序列化保存到文件,适用于自定义UE资源类型。

创建UObject类:

这一步相对简单,按照以下步骤创建UObject类:

1. 在UE编辑器中,选择内容浏览器。

2.创建一个新的C++类,命名为YourCustomUObject。

3.继承自UObject类。

4.在类中添加必要的成员变量和方法。

cpp

// YourCustomUObject.h#pragma once

#include CoreMinimal.h#include UObject.h

UCLASS()class YOURPROJECT_API YourCustomUObject : public UObject{ GENERATED_BODY()

public: YourCustomUObject(); ~YourCustomUObject();

// 添加成员变量和方法};

cpp// YourCustomUObject.cpp#include YourCustomUObject.h

YourCustomUObject::YourCustomUObject(){ // 初始化成员变量}

YourCustomUObject::~YourCustomUObject(){ // 清理资源}

按照以上步骤,您已经成功创建了一个自定义的UObject类。

导语

这篇文章记录了将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<UMyData>(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以使其生效。

如何使用UnrealEngine自定义创建资产类型?

IAssetTools& AssetTool = FAssetToolsModule::GetModule().Get(); // 创建TypeAction实例并存储起来,方便在合适的时候调用UnregisterAssetTypeActions反注册 AssetTypeActions.Emplace(MakeShared<FMyDataTypeAction>()); for (TSharedPtr<FAssetTypeActions_Base> AssetType : AssetTypeActions) { AssetTool.RegisterAssetTypeActions(AssetType.ToSharedRef()); } 效果

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

创建完成后,双击打开编辑窗口,可以修改UProperty字段的值。

本文共计704个文字,预计阅读时间需要3分钟。

如何使用UnrealEngine自定义创建资产类型?

导语:本文记录了将UObject实例保存到Asset文件的方法,通过这种方法可以将自定义的UObject数据序列化保存到文件,适用于自定义UE资源类型。

创建UObject类:

这一步相对简单,按照以下步骤创建UObject类:

1. 在UE编辑器中,选择内容浏览器。

2.创建一个新的C++类,命名为YourCustomUObject。

3.继承自UObject类。

4.在类中添加必要的成员变量和方法。

cpp

// YourCustomUObject.h#pragma once

#include CoreMinimal.h#include UObject.h

UCLASS()class YOURPROJECT_API YourCustomUObject : public UObject{ GENERATED_BODY()

public: YourCustomUObject(); ~YourCustomUObject();

// 添加成员变量和方法};

cpp// YourCustomUObject.cpp#include YourCustomUObject.h

YourCustomUObject::YourCustomUObject(){ // 初始化成员变量}

YourCustomUObject::~YourCustomUObject(){ // 清理资源}

按照以上步骤,您已经成功创建了一个自定义的UObject类。

导语

这篇文章记录了将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<UMyData>(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以使其生效。

如何使用UnrealEngine自定义创建资产类型?

IAssetTools& AssetTool = FAssetToolsModule::GetModule().Get(); // 创建TypeAction实例并存储起来,方便在合适的时候调用UnregisterAssetTypeActions反注册 AssetTypeActions.Emplace(MakeShared<FMyDataTypeAction>()); for (TSharedPtr<FAssetTypeActions_Base> AssetType : AssetTypeActions) { AssetTool.RegisterAssetTypeActions(AssetType.ToSharedRef()); } 效果

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

创建完成后,双击打开编辑窗口,可以修改UProperty字段的值。