`
aigo
  • 浏览: 2537626 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[UE4]C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>()

UE4 
阅读更多

原文作者:@玄冬Wong 

 

相关内容:
C++静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder() 

http://aigo.iteye.com/blog/2281373

C++实现动态加载UObject:StaticLoadObject();以Texture和Material为例

http://aigo.iteye.com/blog/2268056

 

动态加载UObject和动态加载UClass分别用LoadObject<T>(),和LoadClass<T>() ,两者均在在UObjectGlobals.h中。

 

区别:

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

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

 

LoadClass参数注意事项:

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

路径名也必须带_C后缀(LoadObject不需要带_C后缀),例如,蓝图路径是:Blueprint'/Game/Blueprints/MyBP.MyBP'

加后缀以后,则是:Blueprint'/Game/Blueprints/MyBP.MyBP_C',

例子:

 

UClass* Test = LoadClass<AActor>(NULL, TEXT("Blueprint'/Game/Blueprints/MapPathBrush_BP.MapPathBrush_BP_C'"));
 

 

官方还没出文档,只能先看代码注释:

// 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 );
}

 

// 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 );
}

 

/**
 * 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参数注意事项:

 LoadObject加载例子,不需要添加后缀:

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*然后再强转为具体的类型,例如:

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

 

  

另外有两个全局函数叫:StaticLoadObject()和StaticLoadClass(),应该是LoadObject<T>()和LoadClass<T>()的早期版本,前者需要手动强转,后者使用模版封装过,使用更方便,推荐使用后者

 

 LoadClass除了可以加载蓝图,还可以加载UObject类型的native class:

UClass* Test = LoadClass<AActor>(NULL, TEXT("Class'/Script/MyProj.MyProjCharacter'"));

 

分享到:
评论

相关推荐

    ue4蓝图c++动态改变staticmeshactor材质例子动态修改纹理

    实现了通过蓝图把场景中的AStaticMeshActor和两个动态材质实例UMaterialInstanceDynamic 传给c++ 自定义函数参数。 并在自定义函数里面实现两张材质的动态交替变更,其中一张材质还动态加载了本地1.png图片,使得能...

    M5310-A模组AT指令手册2.0

    &lt;CR&gt;&lt;LF&gt;M5310-A&lt;CR&gt;&lt;LF&gt;OK&lt;CR&gt;&lt;LF&gt; After this string has been received the AT Command processor is ready to accept AT commands. If the Applications core was rebooted or restarted for any reason that ...

    用jquery模仿的a的title属性的例子

    &lt;div class=wrap&gt; &lt;ul class=list&gt; &lt;li&gt;&lt;a&gt;UI设计师&lt;/a&gt; &lt;div class=show&gt; &lt;p&gt;所属部门:技术部&lt;/p&gt; &lt;p&gt;工作地点:郑州&lt;/p&gt; &lt;p&gt;招聘人数:21&lt;/p&gt; &lt;/div&gt; &lt;/li&gt; &lt;li&gt;&lt;a&gt;前端开发工程师&lt;/a&gt; &lt;div class=show&gt; &lt;p&gt;所属...

    中移物联 M5310 AT指令 英文版

    &lt;CR&gt;&lt;LF&gt;FIRMWARE DOWNLOADING&lt;CR&gt;&lt;LF&gt; Indicates UE is downloading update package. &lt;CR&gt;&lt;LF&gt;FIRMWARE DOWNLOAD FAILED&lt;CR&gt;&lt;LF&gt; Indicates download failed. &lt;CR&gt;&lt;LF&gt;FIRMWARE DOWNLOADED&lt;CR&gt;&lt;LF&gt; Indicates ...

    vue表单绑定实现多选框和下拉列表的实例

    在vue的实际开发过程中,我们如何将以选中的值直接渲染到页面中,这次主要说的是多选框和下拉列表的实现: &lt;label&gt;测试多选渲染:&lt;/label&gt; &lt;div&gt; &lt;template v-for=item&gt; &lt;input type=checkbox name=hobby :...

    用jquery模仿的a的title属性(兼容ie6/7)

    html代码如下: 代码如下: &lt;div class=”wrap”&gt; &lt;ul class=”list&gt; &lt;li&gt;&lt;a&gt;UI设计师&lt;/a&gt; &lt;div class=”show”&gt; &lt;p&gt;所属部门:技术部&lt;/p&gt; &lt;p&gt;工作地点:郑州&lt;/p&gt; &lt;p&gt;招聘人数:21&lt;/p&gt; &lt;/div&gt; &lt;/li&gt; &lt;li&gt;&lt;a&gt;前端开发...

    selectIn构造工具

    发一个小工具软件 用于对付大量机械操作, 完全绿色版本 免安装直接运行&lt;br&gt;&lt;br&gt;当大家进行大批量查询 比如:&lt;br&gt;&lt;br&gt;SELECT * FROM TABLE &lt;br&gt;WHERE 字段A in&lt;br&gt;(&lt;br&gt;......................................&lt;br&gt;)...

    Vue表单提交点击事件只允许点击一次的实例

    &lt;el click.once=submitOrder()&gt;提交订单&lt;/el&gt; &lt;/div&gt; &lt;/template&gt; 方法: methods: { submitOrder() { // 处理逻辑 } } 2、使用原生JS事件 在数据data里面声明一个flag属性 data() { return { isSubmit: ...

    jQuery实现三级菜单的代码

    上周新接手一个网站建设的活儿,其中有需要要jquery代码...&lt;div class=navMenu&gt; &lt;ul&gt; &lt;li&gt;&lt;a&gt;首页&lt;/a&gt; &lt;ul&gt; &lt;li&gt;&lt;a&gt;JavaScript+&lt;/a&gt; &lt;ul&gt; &lt;li&gt;&lt;a&gt;三角函数&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a&gt;矩形&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;a&gt;语文&lt;/a&gt;

    ue4动态加载资源路径信息

    ue4动态加载资源

    UE4加载本地图片本地图片

    UE4加载本地图片

    UE4 C++教程 虚幻四C++教程

    UE4 C++教程 虚幻四C++教程

    UE4 C++ 离线API

    UE4 C++ 离线API 下载直接使用 无障碍

    手板模型真空复模

    &lt;br/&gt; 如果有需要请联&lt;br/&gt;联系人:董先生 &lt;br/&gt;电话:0755-81478136 传真:0755-81478136 &lt;br/&gt;移动电话:13928444113 &lt;深圳&gt; QQ:47270333&lt;br/&gt;E-mail:zhihui28@yahoo.com.cn &lt;br/&gt;Http: www.zhihui.ue.cn

    C++ STL容器stack和queue详解

    std::stack&lt;int&gt;&gt; third; //使用vector初始化stack ### stack常用方法### empty();//判断是否为空 push(Elem e);//栈顶压入一元素 pop();//弹出栈顶元素 top();//返回栈顶元素 size();//返回栈中元素个数

    vue实现商城购物车功能

    本文实例为大家分享了vue实现商城购物车功能的具体代码,供大家参考,具体内容如下 首先,先上最终的效果图 效果并不是很好看,但是这不是重点。 首先,我们先看下布局: &lt;template&gt; &lt;div class=shopcar id=demo...

    毕业设计基于C++的一款UE4射击游戏源码.zip

    毕业设计基于C++的一款UE4射击游戏源码。一款UE4射击游戏Demo,包含UE4游戏框架及整套联网射击游戏功能。一款UE4射击游戏Demo,包含UE4游戏框架及整套联网射击游戏功能。一款UE4射击游戏Demo,包含UE4游戏框架及整套...

    百度百科词条

    百度百科约500万条词条,可用于语义关联或简单的知识网络建立,xml格式,解压后638M,请不要用记事本直接打开,我是用UE打开的,sublime好像会有乱码,文件内容示例如下: &lt;REC&gt; &lt;ID&gt;=1 &lt;TITLE&gt;=百度百科 ...

Global site tag (gtag.js) - Google Analytics