问题

在编辑器下构建 AssetBundle 时报错,但是不影响 AssetBundle 的生成:

1
2
3
4
Inconsistent asset when sorting preload assets: '' fileID: 0
UnityEditor.BuildPipeline:BuildAssetBundlesWithInfoInternal(String, AssetBundleBuild[], BuildAssetBundleOptions, BuildTargetGroup, BuildTarget)
UnityEditor.BuildPipeline:BuildAssetBundles(String, AssetBundleBuild[], BuildAssetBundleOptions, BuildTargetGroup, BuildTarget) (at /Users/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:459)
UnityEditor.BuildPipeline:BuildAssetBundles(String, AssetBundleBuild[], BuildAssetBundleOptions, BuildTarget) (at /Users/builduser/buildslave/unity/build/artifacts/generated/common/editor/BuildPipelineBindings.gen.cs:447)

环境

  • Unity 2017.4.2f2
  • macOS 10.13.6

搜索

搜索后发现很多人遇到相同的报错,但是问题的原因是不同的。

分析

最近只是修改了部分纹理的导入选项,Texture TypeSprite 修改为 Default

使用之前编写的全局搜索工具(Unity 查找资源引用 - 狂飙)查找修改的纹理,发现果然有 UI 使用。然后将 UI 对应的 AssetBundle 删除后重新构建,错误重现。

结论

Unity 中使用 GUID 与 fileID 来唯一的确定一个资源。

Unity 在构建 AssetBundle 时会报告可以通过 GUID 找到主资源,但是通过 fileID 却找不到子资源的错误。这实际上是告诉我们资源已经存在错误了,需要检查修正。