C++动态、静态加载资源问题

        静态加载指的是必须在构造函数中完成的加载方式,动态加载值得是可以在Runtime期间加载的方式。

巨坑提示:

    加载Class的路径问题,一定要在路径后面加_C,否在会报错;或者把前缀后缀都去掉只留纯路径。


一、静态加载


        静态加载:ConstructorHelpers::FClassFinder()和FObjectFinder()。

        FObjectFinder()用来加载非蓝图资源,比如网格体、动画、贴图、音效等资源;

        FClassFinder()用来加载蓝图并获取蓝图Class,比如角色蓝图。

代码演示:

加载资源:

static ConstructorHelpers::FObjectFinder SphereAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere")); 

加载蓝图Class:

static ConstructorHelpers::FClassFinder UnitSelector(TEXT("Blueprint'/Game/MyProject/MyBlueprint.MyBlueprint_C'"));  TSubclassOf UnitSelectorClass = UnitSelector.Class; 

static ConstructorHelpers::FClassFinder UnitSelector(TEXT("Game/MyProject/MyBlueprint"));  

TSubclassOf UnitSelectorClass = UnitSelector.Class; 

两种路径方式。


二、动态加载


        LoadObject()用来加载非蓝图资源,比如网格体、动画、贴图、音效等资源;

        LoadClass()用来加载蓝图并获取蓝图Class,比如角色蓝图。如果要用蓝图创建对象,必须先通过LoadClass获取class,然后再通过SpawnActor生成对象。

注意事项:

        LoadClass的模版名称,不能直接写UBlueprint,例如:LoadClass是错误的,创建蓝图时选择的是什么父类,则写对应的父类名,假如是Actor,那么要写成:LoadClass,否则无法加载成功。

代码演示:

加载资源:

UObject* Obj = LoadObject(NULL, TEXT("SkeletalMesh'/Game/MyMesh.MyMesh'"));  

USkeletalMesh* MyMesh = Cast(Obj);  

UTexture2D* Tex = LoadObject(NULL, TEXT("Texture2D'/Game/Textures/UI/tex_test001.tex_test001'"));  

加载Class:

TSubclassOf UnitSelector = LoadClass(NULL, TEXT("Blueprint'/Game/MyProject/MyBlueprint.MyBlueprint_C'"));

TSubclassOf UnitSelector = LoadClass(NULL, TEXT("Game/MyProject/MyBlueprint"));

你可能感兴趣的:(Unreal,UE,C++)