我根据我们项目遇到过的问题猜测下,我觉得项目资源导入某个地方有问题的可能性更大些,有没可能以下情况:

  1. 有没有使用代码混淆呢,在 prefab 上挂的脚本忘记添加到排除混淆的列表,导致序列化的字段被混淆,打完bundle后的 prefab 资源加载时候,挂接的脚本出现引用错误;
  2. 资源导入都重载过 OnPostPrecess 处理了资源设置,这一步是否修改了什么不合理的地方,比如破坏了引用关系;
  3. 打包 assetbundle 的时候,在构建 bundle 之前,有没有首先使用文件操作API(不是 Unity 的 AssetDatabase 的 API)来直接修改了某个文件夹或者其他会破坏引用关系的行为,然后构建 bundle,完成后恢复文件夹名字(或者恢复资源原始状态),这样丢失引用关系的几率很大;
  4. 有没有可能发布机器上,看着正常,但是 perforce 已经一堆已修改的 meta 文件;这种问题常出现于美术本地有两个 A1,A2个相同资源在不同文件夹,A1受版本控制,但是由于某种操作,本地临时资源A2使用了原本A1的guid,原本正确的 A1 被迫使用了不正确的新生成guid(相当于两人交换),然后上传了A1的meta,结果发布机器的下来的A1 meta就会跟别人丢失引用,或者得下来本地重新分配了新的guid;美术策划最容易犯这个错误
  5. 我们5.3.8p2,上周遇到一个疑似bug,美术多上传了一组相同的资源,我们得下来都会重新生成guid,很多挂起的 meta,但是,在unity里重新导入后,这些修改的meta,在版本控制里,神奇的消失了,但修改还在。
  6. 如果都不是,只能尝试最小排除法了,删除项目绝大部分资源,一点点增加,然后打包,重现,排除原因;不行的话然后删除代码,一点点添加,打包,重现。。。有时候只能用笨办法。。。