UE4中有一些功能,可以让我们更加轻松地加载资源。下面为大家分享一些加载资源的方法,大家可以试一下!


UE4加载资源



1、蓝图有C++类(C++类创建的蓝图)


就可以直接进行加载,在其中我们可以使用SpawnActor代码把所有的加载资源放到场景里面。


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


如果你的蓝图包含了C++类,可以直接访问类的StaticClass。


2、ConstructorHelpers


我们可以通过ConstructorHelpers来加载,FClassFinder是一个结构体,其中的Class成员变量是TSubClassof类型的。所以只需要SpawnActor(bpClass.Class)就可以了。


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


但该方法只能在类的构造函数中使用,如果在普通的逻辑代码中使用该方法,很可能导致整个编译器的停止工作(crash)。下面是该代码的执行步骤:


{  
    TSubclassOf<T> Class;  
    FClassFinder(const TCHAR* ClassToFind)  
    {  
    CheckIfIsInConstructor(ClassToFind);  
    FString PathName(ClassToFind);  
    StripObjectClass(PathName, true);  
    Class = ConstructorHelpersInternal::FindOrLoadClass(PathName, T::StaticClass());  
    ValidateObject(*Class, PathName, *PathName);  
    }  
    bool Succeeded()  
    {  
    return !!*Class;  
    }  
};  


3、FStringAssetReference


也可以通过FStringAssetReference加载,其中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);  
    }*/  


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


4、StaticLoadObject


这个加载资源的方法跟第三个类似,主要是通过StaticLoadObject加载。与第三个方法不同的是通过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"));  
}  


UE4中加载资源的方法就讲到这里,更多的UE4知识可以到99库查看。



更多文章推荐:


1、UE4中的常见资源介绍


2、优化UE4项目流程的方法:规划和组织


3、UE4可导入什么类型的文件


4、UE4引擎用的是什么语言


5、UE4如何将资源迁移到内容浏览器中

,Unreal Engine技巧,Unreal Engine教程