星鸿阁

 找回密码
 立即注册
搜索
热搜: 活动 交友 动画
查看: 1974|回复: 1

UE4 四种加载资源的方式

[复制链接]

2254

主题

2764

帖子

9644

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9644
发表于 2022-2-1 15:27:16 | 显示全部楼层 |阅读模式

在UNITY中,我们加载资源一般是通过Resources.Load(path).即可完成.该方法返回的是Object类型.如果你想要的是材质或者贴图等等,只要价格类型转换的关键字就可以了例如 as Material,则可以返回一个材质的引用…

在UE4中,加载资源的方式区别较大.经过自己一个下午的摸索,目前发现了这4种资源的加载方式.在UE4中,它的蓝图就大致等于UNTIY中的prefab.所以我们将资源弄成了蓝图的方式来进行加载.



第一种: 如果该蓝图有C++类(或者说是从C++类创建的蓝图),直接进行加载

ATemp* spawnActor = GetWorld()->SpawnActor<ATemp>(ATemp::StaticClass());

所有的加载资源并创建到场景中的方式都离不开SpawnActor这一句代码.如果你的蓝图包含了C++类,那么可以直接访问类的StaticClass

剩下的加载方式均是单纯的加载蓝图,并没有对应的C++类



第二种: 通过ConstructorHelpers来加载

static ConstructorHelpers::FClassFinder<AActor> bpClass(TEXT(“/Game/BluePrint/TestObj”));
if(bpClass.Class != NULL)
{
GetWorld()->SpawnActor(bpClass.Class);
}

FClassFinder是一个结构体,其中的Class成员变量是TSubClassof<T>类型的.所以我们只需要SpawnActor(bpClass.Class)就可以生成我们要的东西了

但是值得一提的是该方法只能在类的构造函数中使用,如果在普通的逻辑代码中嵌套这份代码,很可能引起整个编译器的crash.以下是该代码的具体执行步骤



第三种: 通过FStringAssetReference来加载

FStringAssetReference asset = “Blueprint’/Game/BluePrint/TestObj.TestObj'”;
UObject* itemObj = asset.ResolveObject();
UBlueprint* gen = Cast<UBlueprint>(itemObj);
if (gen != NULL)
{
AActor* spawnActor = GetWorld()->SpawnActor<AActor>(gen->GeneratedClass);
}*/

FStringAssetReference类的作用主要是通过一个字符串,找到该字符串所对应的资源.或者通过给定的资源,找到该资源所对应的在项目中的路径,也就是前面所说的字符串

其中,asset.ResolveObject就是查找字符串对应的资源,返回一个UObejct,我们通过将其转化成UBlueprint类型然后再去的他的GenerateClass即可.



第四种: 通过StaticLoadObject来加载

UObject* loadObj = StaticLoadObject(UBlueprint::StaticClass(), NULL, TEXT(“Blueprint’/Game/BluePrint/TestObj.TestObj'”));
if (loadObj != nullptr)
{
UBlueprint* ubp = Cast<UBlueprint>(loadObj);
AActor* spawnActor = GetWorld()->SpawnActor<AActor>(ubp->GeneratedClass);
UE_LOG(LogClass, Log, TEXT(“Success”));
}

原理的话几乎是和第三种是一样的.只是调用的方式不同而已.在这里就不再赘述了.
总结下来,第三种和第四种应该是最通用的.因为第一种要求有对应的蓝图C++类,而第二种又要求一定要是在构造函数中完成(不论是在谁的构造函数都可以,但该方法一定只能在构造函数中调用)…

回复

使用道具 举报

2254

主题

2764

帖子

9644

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9644
 楼主| 发表于 2022-2-1 15:27:47 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|starfluidga

GMT+8, 2025-9-15 02:32 , Processed in 0.014403 second(s), 20 queries .

Made by Liga 星鸿阁

Copyright © 2020-2048, LigaStudio.

快速回复 返回顶部 返回列表