【UE4】加載資源的方式(四)使用DataAsset引用然后加載
參考資料&原文鏈接
DataAsset
包含一個簡單資源數據的基類。如果您繼承了這個類,編輯器將在content browser中列出它。這個相當於Unity Asset文件,可以用來存儲數據。
它里面只有一個TSubclassOf:
private:
UPROPERTY(AssetRegistrySearchable)
TSubclassOf<UDataAsset> NativeClass;
TSubclassOf模板允許TClassType以類型安全的方式傳遞。就是在傳遞的時候保證類型安全。
使用:
先繼承,再往里面寫我們感興趣的數據:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "ImageDataAsset.generated.h"
/*
*圖片結構體
*/
USTRUCT(BlueprintType)
struct FMyImage
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FName ImageName;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FStringAssetReference ImagePath;
};
/**
* 自定義的DataAsset,在Unreal的Content里面右鍵「Miscellaneous」 - 「DataAsset」,再選擇這個類即可創建。
* 創建完成之后可以打開再向里面添加想要的數據。
*/
UCLASS()
class TESTPROJECT_API UImageDataAsset : public UDataAsset
{
GENERATED_BODY()
public:
//注意公開
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TArray<FMyImage> Images;
};
你可以寫FStringAssetReference
,也可以寫TAssetPtr
,也可以直接寫TSoftObjectPtr
。都是一樣的,存的都是一個弱引用,后面可以用LoadObject
或者StreamManager
來加載。
然后在UE里面創建,並選擇我們自己的類:
可以在里面添加引用:
C++使用:
//.h
public:
UPROPERTY(EditAnywhere,BlueprintReadWrite, Category = "Test")
UImageDataAsset* ImageAssets;
private:
int32 CurCount = 0;
//.cpp
void UWC_TestUI::OnBtnClickCommonBtn_DataAsset()
{
if (ImageAssets)
{
if (ImageAssets->Images.Num() > 0)
{
FString ImgSAR = ImageAssets->Images[CurCount].ImagePath.ToString();
Img_DataAsset->SetBrushFromTexture(LoadObject<UTexture2D>(nullptr,*ImgSAR));
if (CurCount >= ImageAssets->Images.Num() - 1)
{
CurCount = 0;
}
else {
CurCount++;
}
}
}
}
不要忘了選好:
特點
此方式的特點是:
- 需要手動定義DataAsset的數據結構,並且要手動添加需要的數據的引用,稍顯麻煩。
- 不過手動定義數據結構的話靈活性極大,並且可以定義多種不同的數據。
- 這種方式似乎類似於用DataTable數據驅動開發,就像一個配置表一樣。DataTable也需要自定義數據類型。
- 一個DataAsset可以給很多個藍圖使用,只需要使用UPROPOERTY宏。
- DataAsset只是存儲引用,並不是真正的加載數據,加載數據是用的其他方法。
本文標簽
游戲開發
、游戲開發基礎
、Unreal Engine
、UE資源加載
。