Example #1
0
        private AssetBundle LoadBundle(BundleInfo bundleInfo)
        {
            AssetBundle assetBundle = null;
            string      path        = getFilePath((_useHashName ? bundleInfo.buildMd5 : bundleInfo.bundleName) + _suffix);

            if (bundleInfo.bundleReference == null)
            {
                //Debug.LogFormat("Load a new bundle:" + path);
                assetBundle = AssetBundle.LoadFromFile(path);
                if (assetBundle == null)
                {
                    Debug.LogErrorFormat("The AssetBundle '{0}' load fail!", path);
                    return(null);
                }
                else
                {
                    BundleReferenceInfo bundleReferenceInfo = new BundleReferenceInfo()
                    {
                        assetBundle = assetBundle,
                        count       = 1,
                        buildType   = bundleInfo.buildType,
                        state       = BundleLoadState.LoadComplete,
                    };
                    bundleInfo.bundleReference = bundleReferenceInfo;
                }
            }
            else
            {
                assetBundle = bundleInfo.bundleReference.assetBundle;
                bundleInfo.bundleReference.count += 1;
            }
            //Debug.LogFormat("The AssetBundle '{0}' load success!", path);
            return(assetBundle);
        }
Example #2
0
        public IEnumerator LoadBundleAsync(BundleInfo bundleInfo, UnityAction <AssetBundle> OnAssetBundleLoaded)
        {
            string path = getFilePath((_useHashName ? bundleInfo.buildMd5 : bundleInfo.bundleName) + _suffix);

            if (bundleInfo.bundleReference != null)
            {//就算 缓存池里面有 也要模拟异步加载
                yield return(new WaitForEndOfFrame());

                if (OnAssetBundleLoaded != null)
                {
                    OnAssetBundleLoaded(bundleInfo.bundleReference.assetBundle);
                    bundleInfo.bundleReference.count += 1;
                }
            }
            else
            {
                BundleReferenceInfo bundleReferenceInfo = new BundleReferenceInfo()
                {
                    state     = BundleLoadState.Loading,
                    count     = 1,
                    buildType = bundleInfo.buildType,
                };
                AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(path);
                _bundleRequestDict.Add(path, assetBundleCreateRequest);
                yield return(assetBundleCreateRequest);

                if (assetBundleCreateRequest.assetBundle == null)
                {
                    Debug.LogErrorFormat("Failed to load AssetBundle '{0}' !", path);
                }
                bundleReferenceInfo.assetBundle = assetBundleCreateRequest.assetBundle;
                bundleReferenceInfo.state       = BundleLoadState.LoadComplete;
                bundleInfo.bundleReference      = bundleReferenceInfo;
                if (OnAssetBundleLoaded != null)
                {
                    OnAssetBundleLoaded(assetBundleCreateRequest.assetBundle);
                }
                RemoveAssetBundleCreateRequest(path);
            }
        }