Unity3D-使用AssetBundle打包后Load资源时编辑器直接崩溃总结

来源:互联网 发布:java api1.7中文版 编辑:程序博客网 时间:2024/06/05 03:14

链接:http://blog.csdn.net/pz789as/article/details/72853759


在开发Unity游戏的时候,为了时包变得更加小,需要将资源打包成AssetBundle,把用到的图片都改为预制(这个是从雨松那看到的,原因是如果直接放在Resources文件夹下,包会成倍数增加)

我今天尝试了将一些序列图打包成AssetBundle之后,在加载的时候,编辑器突然就瞬间崩溃,什么错误报告都没有弹出。

其他所有的都完好无损,也没有提示错误,但是只要调用LoadAsset就会直接崩,于是只能细心去查找哪里出了问题。

首先:我是检查打包时设置的AssetBundle的标签是不是对的,发现并没有错乱设置(这个有时候因为手动操作不当会出现这个问题);

其次:检查打出的包的manifest文件是否有额外不必要的引用,以及你需要的资源是否都在文件中列出来。(额外引用是指当前打包的引用资源被打包到其他Bundle中去了,可能会引起不必要的错误,文件名字列表如果没有你想要的文件,就好好检查下那个设置没设置对!)

再次:检查在Load之前,使用www.LoadFromCacheOrDownload加载资源是否加载出来,这个很好查。

前面三个我检查了无数遍,都一一排除了,最后还是没找到原因。正在我气恼的时候,想着灌一个真机看看,问题终于找到了,里面有一个图没有加载出来,在真机上并没有崩溃,而是显示的空图,这下有头绪了,我继续Load,加载其他的图片,看看是不是整个包的问题。

后面发现,并不是整个包的问题,而是只有那张图片不行,其他的图片都可以!于是再次回到编辑器中尝试加载其他的图片,看看会不会崩,结果是符合预期的,并没有!

接下来就是重点了:

为什么只有这张图不能使用,经过再三尝试终于发现,原来我是场景中已经引用了这一张图了,Unity在打包的时候判断你这个图已经在包里面,所以就不会给你打包或者说弄个错的东西在里面,然后你所有的程序都没有问题,就是加载的时候Unity可能内部没有做判断,就直接崩溃了。

最后,我把那张在场景中的图删除,然后重新打了一个包,运行之后,没问题了!真是让我一顿好找呀,花了整整一个下午时间去!真鄙视Unity,你加载不出来,你报个错也好呀!哎~~

另外,在重新打包之后,请记得一定要在加载之前调用Caching.CleanCache(); 否则你就算改了包,他也不会更新的,还是会从缓存里面那资源!


最重要的一点:  场景中如果已经引用的资源,请一定要处理,要么把场景中的去掉,要么不要将他打入AssetBundle中去。。

我使用的Unity版本是:5.5.0


最新发现:在把Unity更新到5.6的最新版本之后,这个貌似就没问题!所以推荐大家还是都更新到最新版本吧~