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); }
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); } }