本文主要是介绍《UE4游戏开发》之 《查cook资源失败,问题记录》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 当项目打包时,cook出错,但是从原始引擎提供的信息中,没有提示具体的那个资源出错,要查到出错资源,还是非常麻烦。
- 下面就材质cook出错,增加一些日志,方便查找问题做简单记录
- 材质cook的一个阶段,是收集MaterialShaderMap,如果在这个阶段收集的信息出错,将会在FShaderMapContent::GetOutdatedTypes函数中,因为Shaders指针指向的内存有问题而出错,通过断点发现,FShaderMapContent这个类对象指针为null,而这个类对象的来源于AllMaterialShaderMaps中,但是通过纯断点调试,发现FMaterialShaderMap::GetAllOutdatedTypes这个函数是多线程运行,所以查看变量的值可能会错乱,所以通过增加日志的方式,永久性解决这一问题
- 首先在UMaterialInstance::CacheShadersForResources函数中,添加材质实例母材质名字日志
- 然后在AllMaterialShaderMaps.Add处,打印AllMaterialShaderMaps的个数,可以通过这个个数判断打印的母材质实例名字这条信息对应的AllMaterialShaderMaps中的索引值
- 最后修改FMaterialShaderMap::GetAllOutdatedTypes中的实现,并打印当前执行的AllMaterialShaderMaps的索引值,当在该函数出错时,将会打印出出错的索引
- 如何判断:通过出错的索引 + 1,在日志中去找【FMaterialShaderMap->AllMaterialShaderMaps Num:】这条日志;通过该信息,寻找附近【CacheShadersForResources->BaseMat】日志,该日志会定位出错的母材质和材质实例
PS:以上日志的对应关系,是通过断点查变量值,对比变量地址得来的
这篇关于《UE4游戏开发》之 《查cook资源失败,问题记录》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!