ue4部署到linux找不到资源,UE4资源加载(一)从StaticLoadObject开始

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

前言

这是关于资源加载的第一篇内容,主要从StaticLoadObject出发,讨论UE是如何把序列化的数据给加载到内存中的。了解加载过程前必须先了解UPackage、uasset文件格式、FLinkerLoad。了解这三个概念之后会介绍StaticLoadObject加载过程所经过的四个步骤。

UPackage、uasset、FLinkerLoad

一个资源在文件中对应uasset,在内存中对应为UPackage。

1、UPackage

一个资源在内存中表现为一个UPackage的实例,比如一个SoundCue资源,SoundCue内部可能有很多个蓝图节点,就有一些节点的数据,比如Modulator、Mixer等等,这些数据是实例本身的数据。同时SoundCue也引用外部声音文件SoundWave。SoundWave也是一个资源,也是对应的一个UPackage实例。这样两个UPackage之间就存在依赖关系。

UPackage就好比一个班级,底下的数据UObject就好比学生,对于班级(UPackage)底下的同学(UObject)来说,UPackage是UObject的Outer。要知道资源自身数据UObject的内容,必须先知道UPackage才行。

2、uasset文件格式

UPackage序列化到本地之后就是uasset文件。uasset是本地的资源文件,文件格式如图

e9f51f48593cf13f609fb67b03a578f6.pngFile Summary 文件头信息

Name Table 包中对象的名字表

Import Table 存放被该包中对象引用的其它包中的对象信息(路径名和类型)

Export Table 该包中的对象信息(路径名和类型)

Export Objects 所有Export Table中对象的实际数据。

前文提过,两个UPackage实例是可以存在依赖关系的,序列化到uasset文件的时候,这些依赖关系就存储为ImportTable。可以把ImportTable看做是这个资源所依赖的其他资源的列表,ExportTable就是这个资源本身的列表。Unity导出资源的时候是导出AssetBundle + 依赖表。每个资源所依赖的其他资源都记录在依赖表中 。这里的uasset可以看做是AssetBundle + 依赖表中这个资源的依赖文件记录。其中AssetBundle就是对应的ExportTable以及ExportObject的内容,依赖表中这个资源的依赖文件记录就是对应的ImportTable。

3、FLinkerLoad

515413c0c40a01bc7626d52278c7d3cd.png

FLinkerLoad是作为uasset和内存UPackage的中间桥梁。在加载内容生成UPackage的时候,UPackage会根据名字找到uasset文件,由FLinkerLoad来负责加载。FLinkerLoad主要内容如下:FArchive* Loader;

//Loader负责读取具体文件

TArrayImportMap;

//将uasset的ImportTable加载到ImportMap中,FObjectImport是需要依赖(导入)的UObject

TArrayExportMap;

//FObjectExport是这个UPackage所拥有的UObject(这些UObject都能提供给其他UPackage作为Import)

在了解了基本概念后,接下来进入主要部分,也就是StaticLoadObject加载,StaticLoadObject可以分成四个部分。

加载内容的四个步骤:根据文件名字创建一个空的包(没有任何文件相关的数据)

建立一个LinkerLoad去加载对应的uasset文件 序列化。

优先加载ImportMap

加载ExportMap(本身的数

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值