问题

有一个资源 Abc_Bcd_Cde.png 被改名为 abc_bcd_cde.png。在编辑器中可以正常加载,但是手机上无法加载。

环境

  • Unity 2017.4.2f2
  • macOS 10.13.6

查找过程

Git

由于项目使用 Git 作为版本控制软件,首先要确定资源在仓库中是否被正确改名了,经检查后发现正确。

另外要检查打包机的 Git 仓库中的文件名是否被正确改名了,经检查后发现正确。

Unity

确认资源在编辑器下可以正常加载,编辑器已经加入对文件名大小写不同的检测了,经检查发现没有问题。

AssetBundle

项目使用 Unity 默认的 AssetBundle 打包 API,默认就会开启增量打包功能,是通过保存一个 manifest 文件实现的。

打开资源所在 AssetBundle 对应的 manifest 文件,发现其中保存的是 Abc_Bcd_Cde.png

使用 Unity 自带的 WebExtract 与 binary2text 工具解压查看对应的 AssetBundle,可以看到资源名字错误,还是 Abc_Bcd_Cde.png

结论

Unity 并没有认为资源文件名大小写变化算是变化,因此没有重新打包对应的 AssetBundle。

解决方案

打包时可以清除 AssetBundle 缓存,然后再次打包。

其实在项目中有各种各样的缓存,在打包时应该可以指定清除所有缓存功能,防止出现奇怪的问题。