[UE4]C++实现动态加载的问题
2017-03-31 18:09
447 查看
动态加载UObject和动态加载UClass分别用LoadObject<T>(),和LoadClass<T>() ,两者均在在UObjectGlobals.h中。 另外注意:LoadClass<T>的模版名称,不能直接写UBlueprint,例如:LoadClass<UBlueprint>是错误的,创建蓝图时选择的是什么父类,则写对应的父类名,假如是Actor,那么要写成:LoadClass<AActor>,否则无法加载成功。 路径名也必须带_C后缀(LoadObject不需要带_C后缀),例如,蓝图路径是:Blueprint'/Game/Blueprints/MyBP.MyBP', 加后缀以后,则是:Blueprint'/Game/Blueprints/MyBP.MyBP_C', 例子: Cpp代码 UClass* Test = LoadClass<AActor>(NULL, TEXT("Blueprint'/Game/Blueprints/MapPathBrush_BP.MapPathBrush_BP_C'")); 官方还没出文档,只能先看代码注释: Cpp代码 // Load an object. 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 ); } Cpp代码 // Load a class object. 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 ); } Cpp代码 /** * Find or load an object by string name with optional outer and filename specifications. * These are optional because the InName can contain all of the necessary information. * * @param ObjectClass The class (or a superclass) of the object to be loaded. * @param InOuter An optional object to narrow where to find/load the object from * @param InName String name of the object. If it's not fully qualified, InOuter and/or Filename will be needed * @param Filename An optional file to load from (or find in the file's package object) * @param LoadFlags Flags controlling how to handle loading from disk * @param Sandbox A list of packages to restrict the search for the object * @param bAllowObjectReconciliation Whether to allow the object to be found via FindObject in the case of seek free loading * * @return The object that was loaded or found. NULL for a failure. */ COREUOBJECT_API UObject* StaticLoadObject( UClass* Class, UObject* InOuter, const TCHAR* Name, const TCHAR* Filename = NULL, uint32 LoadFlags = LOAD_None, UPackageMap* Sandbox = NULL, bool bAllowObjectReconciliation = true ); COREUOBJECT_API UClass* StaticLoadClass(UClass* BaseClass, UObject* InOuter, const TCHAR* Name, const TCHAR* Filename = NULL, uint32 LoadFlags = LOAD_None, UPackageMap* Sandbox = NULL); LoadObject加载例子,不需要添加后缀: Cpp代码 UTexture2D* Tex = LoadObject<UTexture2D>(NULL, TEXT("Texture2D'/Game/Textures/UI/tex_test001.tex_test001'")); 可以用LoadObject加载的文件包括: Texture、Material、SoundWave、SoundCue、ParticlesSystem、AnimMontage、BlendSpace(1D,2D,3D)、AnimSequence、AnimBlueprint、SkeletalMesh等等。这些文件的父类都是UObject,所以也可以先加载为UObject*然后再强转为具体的类型,例如: Cpp代码 UObject* Obj = LoadObject<UObject>(NULL, TEXT("SkeletalMesh'/Game/MyMesh.MyMesh'")); USkeletalMesh* MyMesh = Cast<USkeletalMesh*>(Obj); 另外有两个全局函数叫:StaticLoadObject()和StaticLoadClass(),应该是LoadObject<T>()和LoadClass<T>()的早期版本,前者需要手动强转,后者使用模版封装过,使用更方便,推荐使用后者 |
相关文章推荐
- [UE4]C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>() 及 静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()
- [UE4]C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>()
- [UE4]C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>()
- [UE4]C++实现动态加载UObject:StaticLoadObject();以Texture和Material为例
- dh: 实现iframe 自适应高度的问题(初始化和动态加载数据的时候)
- 动态加载DLL实现不同DLL的相同导出函数调用问题
- 流水线调度最优问题(装配线调度问题)动态规划 O(n)时间(线性时间)C++实现
- c++实现加载so动态库中的资源
- C++Linux平台动态加载类库实现类
- 在嵌入式单地址空间OS中实现动态加载的问题
- 矩阵链乘法问题(给A1A2A3...An加括号,使之乘法次数最小)动态规划问题C++实现
- 矩阵链乘法问题(给A1A2A3...An加括号,使之乘法次数最小)动态规划问题C++实现
- c++实现0-1背包问题完整源码(动态…
- 0-1背包问题动态规划代码实现(C++实现)
- c++动态加载dll中的类(用于实现依据字符串类名创建对象)
- c++动态加载dll中的类(用于实现依据字符串类名创建对象)
- C++实现算法导论十五章动态规划之钢条分割问题
- 动态规划与钢条切割问题 C++实现
- 动态加载布局和控件的方式实现动态加载(用listView解决EditText问题挺麻烦)
- C++ 动态加载库链接传入的类变量中的接口报undefined symbol问题