阶段1:蓝图到调用StreamableManager 阶段2:StreamableManager逻辑部分 阶段3:LoadPackageAsync 调试验证 PIE模式下 写在前面 准备从一个最简单的例子了解UE4资源加载全貌,选择纹理资源的原因是因为没有复杂的依赖关系。 版本用的UE4.27,UE5的Zen Loader看起来是建立在UE4 EDL基础上的,以后也会看看UE5的实现(也许)。
其中首先调用FindExistingPackageAndAddCompletionCallback方法,其内部逻辑大概是先尝试在字典AsyncPackageNameLookup中查找该Package是否已经创建过了,如果创建过则将加载完成回调和RequestID添加到该Package中并返回。然后更新优先级Priority。查找失败会在LoadedPackagesNameLookup中再查找一次,这个字典中存放的应该是已经加载完成...
在游戏资源加载过程中,资源间存在依赖关系,如模型依赖材质,材质依赖贴图等。此机制在UE4的资源加载阶段中发挥关键作用。首先,所有Import对象的XObject属性为null。程序会调用FindExistingImport方法,查找对应对象是否已加载至内存。接着,每个Import都关联一个Outer属性,例如Import0的Outer为Import7,而Impor...
调试验证了资源加载流程。编译器运行游戏时不会触发EDL逻辑,所以需要通过打包游戏进行测试。路径加载纹理时,记得手动添加打包目录。在调试时,发现异步线程在特定事件处暂停,加载纹理按钮触发后,观察到与预期一致的流程,从创建FAsyncPackage到执行InsertPackage方法。总结,UE4的资源加载通过异步线程实现,确保...
处理前各Import的XObject都为null,首先调用FindExistingImport方法查看对应XObject是否已经加载到内存中。 然后每一项Import有一个Outer,例如Import0的Outer是Import7,Import7的Outer是Null,表示其XObject是一个UPacakge。 ImportIndexObjectNameOuter 0 Default_BodySetup ImportIndex=7 1 BodySetup ImportIndex=7 2 Stat...
EventLoadGraph这套系统主要是为了管理资源间复杂的依赖关系,例如A资源的步骤2未完成,B资源的步骤1就不能进行这种问题。 从蓝图载入一张纹理开始理解UE4的资源加载(一) - 知乎 (zhihu.com) 从蓝图载入一张纹理开始理解UE4的资源加载(二) - 知乎 (zhihu.com) 一、相关的类 FEventLoadNode FEventLoadNode对象...
从蓝图载入一张纹理开始理解UE4的资源加载(十)——ExportsDone、ProcessPostloadWait、StartPostLoad 剩下三个事件都不算复杂,并且互相有所关联,就放在一起说吧~ 本来准备了九大行星(带着冥王星一起)当这九个阶段的封面图,现在得把后面三个p一块了QAQ
GetFileVersionLicenseeUE4()); Loader->SetEngineVer(Summary.SavedByEngineVersion); Loader->SetCustomVersions(SummaryVersions); } 通过LinkerRoot找到UPackage,将各种属性传递给UPackage对象 if (UPackage* LinkerRootPackage = LinkerRoot) { LinkerRootPackage->SetPackageFlagsTo(NewPackageFlags); LinkerRoot...
StartPrecacheRequest方法中依次处理可以开始IO的Export,过程中使用bReady变量标记是否完成加载。 ExportsThatCanHaveIOStarted.HeapPop(LocalExportIndex, false); FObjectExport& Export = Linker->ExportMap[LocalExportIndex]; bool bReady = false; 首先判断Export是否含有NeedLoad标记,否则无需加载。
修改对应节点的bFire属性为true,Node相关的具体介绍见上一篇从蓝图载入一张纹理开始理解UE4的资源加载(三)——EventLoadGraph,后续只会简单提到。 AsyncPackageLoadingState属性 控制FAsyncPackage加载过程的关键变量,表示当前Package处于什么阶段。 创建时该属性为EAsyncPackageLoadingState::NewPackage,创建Linker后变更为EAsyn...