1、编辑器直接加载:
通过使用属性宏标记UPROPERTY(Edit三个都可以3)来将资产对象指针暴露到编辑器面板,从而直接从编辑器面板拾取资产。
注意:UClass类指针,专门用来拾取类模版资产
// 拾取任意类 UPROPERTY(EditDefaultsOnly) UClass* ActorClass; // 拾取音频类 UPROPERTY(EditDefaultsOnly) class USoundBase* SoundSrc;
2、TSubClassOf
- TSubclassOf是提供UClass的安全模板类,通过此模板类我们可以快速在编辑器中进行类型选择,帮助我们快速构建某种类型对象数据。
- TS对类型有约束,只能选取模版类型或是继承自模版类型的类或是蓝图
使用语法:
TSubclassOf<T> type; type.Get();// 获取到Class数据对象
通过通过TSubClassOf构建指定的对象类型
// 拾取任意类 UPROPERTY(EditDefaultsOnly) UClass* ActorClass; // 拾取指定的TestActor类或其子类 UPROPERTY(EditDefaultsOnly) TSubclassOf<class ATestActor> TestActorclass;
3、构造函数加载
- 在构造函数中可以借助构造函数资产加载类进行资源引用,更加方便便捷。
- 静态资源引用类ConstructorHelpers可以进行类引用,源资源引用,注意ConstructorHelpers只能在构造函数中使用
常用资源加入分类
- FClassFinder 常用来加载创建后的蓝图对象
- FObjectFinder 用来加载各种资源,如音频,图片,材质,静态网格
FClassFinder语法
// 返回值是TSubClassOf ConstructorHelpers::FClassFinder<ATestActor>(TEXT("/Game/MyTestActor.MyTestActor")).Class; // 拾取蓝图对象类 拾取蓝图类 必须加 '_C' ConstructorHelpers::FClassFinder<ATestActor> UnitSelector(TEXT("Blueprint'/Game/MyTestActor.MyTestActor_C'"));
FObjectFinder语法
UTexture2D* BarFillTure; ConstructorHelpers::FObjectFinder<UTexture2D> BarFillObj(TEXT("/Game/UI/HUD/BarFill")); BarFillTure = BarFillObj.Object;
注意:
- 操作路径前加入/Game/前缀
- ConstructorHelpers 类将尝试在内存中查找该资产,如果找不到,则进行加载
- ConstructorHelpers只能在构造函数中使用,GameInstance中是 Init 函数(需要重载)
- 如果加载失败或是未找到资源,对象内的资产属性为null
- 如果加载蓝图类模版对象时,需要加注“_C”
查找加载
在只知道目标资源路径的基础上,进行运行时态的资源加载,UE提供了LoadObject用来加载资产,LoadClass用来加载类,通过模版约束对象类型,增加操作安全,但是注意,资源加载可能会失败或是无效,需要对操作的结果进行判定。
- LoadObject 可直接返回资源有效对象指针
- LoadClass 返回操作类,非对象返回UClass类型指针
函数定义:
/** * Load an object. * @see StaticLoadObject() */ template< class T > inline T* LoadObject( UObject* Outer, const TCHAR* Name, const TCHAR* Filename=nullptr, uint32 LoadFlags=LOAD_None, UPackageMap* Sandbox=nullptr ) { return (T*)StaticLoadObject( T::StaticClass(), Outer, Name, Filename, LoadFlags, Sandbox ); } /** * Load a class object * @see StaticLoadClass */ template< class T > inline UClass* LoadClass( UObject* Outer, const TCHAR* Name, const TCHAR* Filename=nullptr, uint32 LoadFlags=LOAD_None, UPackageMap* Sandbox=nullptr ) { return StaticLoadClass( T::StaticClass(), Outer, Name, Filename, LoadFlags, Sandbox ); }
参数含义:
- Outer 帮助我们进行搜索范围锁定,可以填入同目录资源,如不存在填入空
- Name 资源文件名,可以在编辑器中通过选择资源右键获取引用名,注意蓝图加载需要加入后缀”_C”
函数使用:
LoadObject<AActor>(nullptr, TEXT("Blueprint'/Game/MyTestActor.MyTestActor_C'"));
标签:UClass,拾取,MyTestActor,C++,UE,ConstructorHelpers,资源,加载 From: https://www.cnblogs.com/limu-zy/p/16710915.html