《UE4游戏开发》之 《查cook资源失败,问题记录》

  1. 当项目打包时,cook出错,但是从原始引擎提供的信息中,没有提示具体的那个资源出错,要查到出错资源,还是非常麻烦。
  2. 下面就材质cook出错,增加一些日志,方便查找问题做简单记录
  3. 材质cook的一个阶段,是收集MaterialShaderMap,如果在这个阶段收集的信息出错,将会在FShaderMapContent::GetOutdatedTypes函数中,因为Shaders指针指向的内存有问题而出错,通过断点发现,FShaderMapContent这个类对象指针为null,而这个类对象的来源于AllMaterialShaderMaps中,但是通过纯断点调试,发现FMaterialShaderMap::GetAllOutdatedTypes这个函数是多线程运行,所以查看变量的值可能会错乱,所以通过增加日志的方式,永久性解决这一问题
  4. 首先在UMaterialInstance::CacheShadersForResources函数中,添加材质实例母材质名字日志在这里插入图片描述
  5. 然后在AllMaterialShaderMaps.Add处,打印AllMaterialShaderMaps的个数,可以通过这个个数判断打印的母材质实例名字这条信息对应的AllMaterialShaderMaps中的索引值在这里插入图片描述
  6. 最后修改FMaterialShaderMap::GetAllOutdatedTypes中的实现,并打印当前执行的AllMaterialShaderMaps的索引值,当在该函数出错时,将会打印出出错的索引在这里插入图片描述
  7. 如何判断:通过出错的索引 + 1,在日志中去找【FMaterialShaderMap->AllMaterialShaderMaps Num:】这条日志;通过该信息,寻找附近【CacheShadersForResources->BaseMat】日志,该日志会定位出错的母材质和材质实例
    在这里插入图片描述
    在这里插入图片描述
    PS:以上日志的对应关系,是通过断点查变量值,对比变量地址得来的
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值