数据资产

关于虚幻引擎中数据资产的信息。

数据资产

数据资产(Data Asset) 是一种在其类实例中存储与特定系统相关数据的资产。

  • 可以使用继承自 UDataAsset 的原生类在内容浏览器中创建资产。如果您需要数据继承或更复杂的层次结构,我们建议创建仅数据蓝图类。

  • 继承自主数据资产会实现主资产 ID 并支持资产包,这允许从资产管理器手动加载和卸载它。

  • 原生子类的实例可以直接在虚幻编辑器中创建为数据资产,并将使用原生类的名称作为主资产类型

    创建数据资产

    在上图中,在编辑器中创建新数据资产时,系统会提示您从原生子类列表中选择。

  • 可以创建蓝图子类以添加变量,然后由设置这些变量的仅数据蓝图再次子类化。对于蓝图子类,我们建议使用仅数据蓝图而不是数据资产实例来处理数据继承并更新父类。

创建数据资产

要继承或创建您自己的数据资产,请按照以下步骤操作:

  1. 导航到工具 > 新建 C++ 类,然后基于 DataAsset 创建新类。

    新建 C++ 类

  2. 添加您的类数据成员。

    USTRUCT()
    struct FMyAssetInfo {
        GENERATED_BODY()
    
        UPROPERTY(EditAnywhere)
        FString AssetName;
    
        UPROPERTY(EditAnywhere)
        UTexture2D* AssetThumbnail;
    };
  3. 构建您的项目。

  4. 在虚幻编辑器中,右键单击内容浏览器,然后选择杂项 > 数据资产

    创建数据资产

  5. 当提示选择数据资产实例的类时,您的资产应该填充在列表中。

    选择类

  6. 打开您的数据资产蓝图以观察成员变量。

    数据资产蓝图

使用属性说明符时,您可以在资产中观察所有成员变量,以便设计师可以直接从编辑器修改数据。

主数据资产

主数据资产是实现 GetPrimaryAssetId 函数并支持资产包的数据资产,这允许从资产管理器手动加载/卸载它。

主资产类型等于沿层次结构向上的第一个原生类的名称或最高级别的蓝图类。例如,如果您有 UPrimaryDataAsset -> UParentNativeClass -> UChildNativeClass -> DataOnlyBlueprintClass,则类型将是 ChildNativeClass

或者,如果您有 UPrimaryDataAsset -> ParentBlueprintClass -> DataOnlyBlueprintClass,则类型将是 ParentBlueprintClass

要更改此行为,您可以在原生类中重写 GetPrimaryAssetId 函数,或将这些函数复制到不同的原生基类中。

创建主数据资产

要继承或创建您自己的主数据资产,请按照以下步骤操作:

  1. 导航到工具 > 新建 C++ 类,然后基于 PrimaryDataAsset 创建新类。

  2. 添加您的类成员并重写 GetPrimaryAssetID 函数。

    UCLASS()
    class PROJECTExample_API UExampleDataAsset : public UPrimaryDataAsset {
        GENERATED_BODY()
    
        UPROPERTY(EditAnywhere)
        FString AssetName;
    
        UPROPERTY(EditAnywhere)
        UTexture2D* AssetThumbnail;
    
    public:
        virtual FPrimaryAssetId GetPrimaryAssetId() const override {
            return FPrimaryAssetId(FName(TEXT("ExampleDataAsset")), GetFName());
        }
    };

加载和卸载资产

虚幻引擎自动处理资产的加载和卸载,为开发者提供一种在需要每个资产时与引擎通信的方法。但是,您可能希望精确控制资产的发现、加载和审计时间。对于这些情况,我们建议使用资产管理器

异步资产加载

虚幻引擎简化了异步加载资产数据的过程。这些方法在开发中以及对设备上的烘焙数据的作用相同,因此无需维护两条按需加载数据的代码路径。

请参阅异步资产加载文档。