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

本文详细介绍了Unity3D中静态加载(使用FObjectFinder和FClassFinder)和动态加载(使用LoadObject和LoadClass)资源及蓝图类的方法,包括路径要求和注意事项,以及示例代码演示。
摘要由CSDN通过智能技术生成

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

巨坑提示:

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


一、静态加载


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

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

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

代码演示:

加载资源:

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

加载蓝图Class:

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

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

TSubclassOf<AActor> UnitSelectorClass = UnitSelector.Class; 

两种路径方式。


二、动态加载


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

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

注意事项:

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

代码演示:

加载资源:

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

USkeletalMesh* MyMesh = Cast<USkeletalMesh*>(Obj);  

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

加载Class:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值