赞
踩
XluaMVC自带的资源管理模块,AssetLoader,我个人认为写的不太好,里面异步和同步没有区分开,很容易出错误,所以资源管理模块这儿,我准备自己写;unity推荐的一个AssetBundleManager功能过于复杂,而且也不好订制自己的功能,所以,可以学习其中的思想,但最好还是别用
以上讲的是打包AB时的压缩格式,另外一个参数BuildTarget对应不同的目标平台,注意,对应不同的平台,会打包成不同的AB包,不同平台的AB包是无法在各平台间共用的,EditorUserBuildSettings.activeBuildTarget这个工具,可以让我们不用硬编码,会自动判断你想要的平台
假如,你有一个坦克预制件TankA,坦克预制件TankB,TankA和TankB都引用了一个相同的材质M1,M1身上有一个Texture,我称为T1;如果我打包AB时,没有单独把M1和T1打包到一个AB中,而是直接把TankA和TankB打包到了两个AB1和AB2中,你们一定担心,会不会造成,从AB中提取TankA时,丢失材质呢?
这个是不会的,因为当你打包TankA时,Unity会自动把这个预件所引用的资源,一起拿过来,打包到一个AB中,所以不会出现丢失问题 *
问题来了,你打包TankA时,它自动打包了M1和T1到AB1中.你打包TankB时,它又进行了相同的事情,也就是说,M1和T1现在在两个AB中,有两份,也就是说万一还有别人引用它,这种方式会造成M1和T1出现多份;
比如说,从TankAB对应的AB包中,提取TankAB的预制件,然后实例化,肯定会出现资源丢失的情况!
针对这种情况,unity是这样解决的
If AssetBundle.Unload(true) is called, then M will be removed from the scene, destroyed and unloaded. However, if AssetBundle.Unload(false) is called, then AB’s header information will be unloaded but M will remain in the scene and will still be functional. Calling AssetBundle.Unload(false) breaks the link between M and AB. If AB is loaded again later, then fresh copies of the Objects contained in AB will be loaded into memory.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。