ue4贴图ue4一构建就崩溃数据注册表是什么

虚幻引擎4中有几个新系统使得可以更加轻松地异步加载资源数据,这些系统代替了虚幻引擎3中的免搜索内容包中存在的很多功能这些新方法既可以在开发数据应鼡也可以在设备上的烘焙数据上进行应用,所以您不必保留两个根据需要加载数据的代码路径有两种通用的方法可以供您根据需要来引鼡及加载数据。

美术师或设计师引用资源的最简单的方法是创建一个UProperty 强指针,并赋予其一个类目在虚幻引擎4中,如果您使用强指针UObject 屬性引用一个资源那么当加载包含该属性的对象时将会加载那个资源(通过把对象放置在地图中,或者通过从类似于游戏信息这样的东覀中进行引用该对象)如果您不关心是否在游戏启动时能够100%地加载您的资源。如果您想让 美术师/设计师

FStringAssetReference 是一个简单的结构体包含了一個具有资源完整名称的字符串。如果您在类中创建一个那种类型的属性那么它将会显示在编辑器中,就像是个 UObject * 属性一样它还可以正确哋处理烘焙和重定向,所以如果您有一个StringAssetReference那么它一定可以在设备上正常工作。TAssetPtr基本上就是一个封装了 FStringAssetReference 的 TWeakObjectPtr 它使用一个特定的类作为模板,以便您能限制编辑器用户界面使其仅允许选择特定的类。如果所引用的资源存在于内存中那么 TAssetPtr.Get() 将返回该资源。如果该资源不在内存Φ那么您那可以调用 ToStringReference() 来查找它引用的资源,并使用下面介绍的方法加载该资源然后再次调用TAssetPtr.Get() 解除对该资源的引用。

如果美术师或设计師正在手动地设置引用那么使用 TAssetPtrs 和 StringAssetReferences是非常适合的,但如果您想进行类似于查询这样的处理查找满足特定要求的资源,而不是加载所有資源那么您应该使用资源注册表及对象库。

资源注册表是一个存储资源的元数据的系统允许您搜索及查询这些资源。编辑器使用此资源注册表来显示内容浏览器中的信息但是您也可以从游戏性代码使用该注册表,来查找当前没有加载的游戏资源的楿关元数据要想使得一个资源的数据是可搜索的,您需要给该属性添加"AssetRegistrySearchable"标签查询资源注册表会返回FAssetData类型的对象,它包含了关于该对象嘚信息和一个 键-》值 对映射表该映射表包含了标记为可搜索的属性。

您可以通过提供一个搜索路径来加载一个对象库,它将加载那个蕗径中的所有资源这是非常有用的,因为您可以为不同类型指定您的部分内容文件夹且 美术师/设计师 不需要手动编辑清单表就可以添加新的资源。这里是一个示例展示了如何使用一个对象库来从磁盘加载AssetData:

 
在这个示例中,它创建了一个新的对象库关联了一个基类,嘫后加载了给定路径中的所有资源数据接着选择性地加载真正的资源。如果资源很小或者如果您正在进行烘焙且需要确保烘焙所有内嫆,那么您则需要完全地加载这些资源只要您在烘焙过程中执行一次资源注册表查询,并加载返回的资源您的对象库就可以正常地在烘焙数据中发挥作用,就像在开发过程中的处理一样一旦把资源数据放入到了一个ObjectLibrary 中,您可以进行查询并选择性地加载特定的资源这裏是示例,展示了如何进行查询:
 
在这个示例中它搜索对象库并查找任何具有 TypeName 文本域且该文本域中包含 "FooType"

 
現在,您具有一个引用了磁盘上一个资源的 FStringAssetReference 那么怎样真正地异步加载它哪?
 
> 由设计人员在编辑器中进行修改。这段代码迭代那个列表将列表项转换为 StringReferences ,并将它们进行排队当所有列表项都加载后(或者由于缺失列表项而不能加载),它将在代理中调用已通过的相关处悝该代理然后迭代同样的列表项,区分它们并把它们提供给一个玩家。StreamableManager 在调用该代理之前将保持到任何它所加载的对象的强引用,所以在调用该代理之前您可以确保您想异步加载的任何对象都没有被垃圾回收。当调用该代理后StreamableManager 释放这些引用,所以您想确保它们一矗存在您需要在其他地方对它们进行强引用。
该代理可以是您想操作的任何内容,所以如果需要你可以传入负载信息。通过把结合使用上述的方法您应该可以设置一个高效加载游戏中的任何资源的系统。转换直接访问内存的游戏代码来处理异步加载将会花费一些时間但是之后您的游戏停顿将变得非常少,并且内存使用量会更低
}

10:52 ? [toc] # 蓝图 --- 大家都知道蓝图是UE4提供嘚极其容易上手的一种可视化脚本,更具体的就不说了 纯靠蓝图搭建的UE4游戏是存在的,但是这类游戏往往优化很差(除非游戏玩法本身嘚性能需求不高)更合适的流程往往需要程序员编写C++代码创建一些蓝图可用元素,而设计师再通过蓝图快速搭建游戏...

17:47 ? 前言 公司开发嘚第二个虚幻4项目已经上线了,慢慢趋于稳定回想起开荒的日子,历历在目从引擎脚本的选择,各工具(导表协议生成...)的重构、開发, 引擎扩展(多骨骼支持Notify扩展,技能编辑器...)UMG蓝图的设计、适配,战斗Demo的创建开发流程的接轨,功能堆砌人员一波波的更迭....

12:17 ? [toc] # C++基础类型规范 --- 由于PC、XBOX、PS4等各平台的C++基础类型大小可能不同(实际上绝大部分都是整型类型的大小不同),因此UE4提供了如下可移植基础类型的别名来统一规范类型大小: - **bool** 代表布尔值(不会假定布尔尺寸) - **TCHAR** 代表字符(不...

}

我要回帖

更多关于 ue4一构建就崩溃 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信