framework bundle多次加载注意

来源:互联网 发布:法兰克系统编程 编辑:程序博客网 时间:2024/05/24 07:37

转自:http://www.cnblogs.com/realtimepixels/p/3652128.html

2.assetbundle如果从WWW中被读取过一次,再读取会报错
当你把assetbundle资源用www下载下来后,往往都会使用“wwwResource.assetbundle”,但是注意,这个函数调用assetbundle的时候,只能调用一遍。意思是,当你要再次读取的时候,会报错。这时候,需要你写一套对于assetbundle的控制程序,保证第一次读取资源的时候是使用wwwResource.assetbundle,第二次再次利用,则要用已经读取出来的资源。


两个Bundle资源及依赖关系

BundleA->(dependencies)BundleB

BundleB


使用:

 resMgr:LoadPrefab("BundleA", {}, function(objs) end)

 resMgr:LoadPrefab("BundleB", {}, function(objs) end)

报错:can't be loaded because another AssetBundle with the same files is already loaded.

原因:OnLoadAssetBundle->

yield return StartCoroutine(OnLoadAssetBundle(depName, type));这次依赖下载没有进入request列表

在resMgr:LoadPrefab("BundleB"  进行了第二次bundle加载,导致重复bundle加载

解决:依赖加载时进入加载队列但是回调为空

 IEnumerator OnLoadAssetBundle(string abName, Type type) {
            string url = m_BaseDownloadingURL + abName;

            List<LoadAssetRequest> requests = null;
            if (!m_LoadRequests.TryGetValue(abName, out requests))
            {
                LoadAssetRequest request = new LoadAssetRequest();
                request.assetType = null;
                request.assetNames = new string[0]{};
                request.luaFunc = null;
                request.sharpFunc = null;

                requests = new List<LoadAssetRequest>();
                requests.Add(request);
                m_LoadRequests.Add(abName, requests);
            }

            WWW download = null;

            .........

 //yield return StartCoroutine(OnLoadAssetBundle(depName, type));
yield return StartCoroutine(OnLoadAsset<GameObject>(depName)); //依赖加载不需要回调,类型无所谓



原创粉丝点击