【UE4】加載資源的方式(四)使用DataAsset引用然后加載


【UE4】加載資源的方式(四)使用DataAsset引用然后加載

參考資料&原文鏈接

UE4資源加載方式

Unreal4異步加載資源

UE4 異步資源加載

StreamableManager和異步加載

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里面創建,並選擇我們自己的類:

image-20211104214836999

image-20211104214909635

可以在里面添加引用:

image-20211104215031211

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++;
			}
		}
	}
}

不要忘了選好:

image-20211104215747658

特點

此方式的特點是:

  • 需要手動定義DataAsset的數據結構,並且要手動添加需要的數據的引用,稍顯麻煩。
  • 不過手動定義數據結構的話靈活性極大,並且可以定義多種不同的數據。
  • 這種方式似乎類似於用DataTable數據驅動開發,就像一個配置表一樣。DataTable也需要自定義數據類型。
  • 一個DataAsset可以給很多個藍圖使用,只需要使用UPROPOERTY宏。
  • DataAsset只是存儲引用,並不是真正的加載數據,加載數據是用的其他方法。

本文標簽

游戲開發游戲開發基礎Unreal EngineUE資源加載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM