/// <summary> /// 开始异步加载一个bundle /// </summary> /// <param name="urlname">url地址</param> /// <param name="_realName">bundle名字,用于缓存使用</param> /// <param name="MainAboutName">主要bundle,因为可能当前下载的bundle是被依赖所以需要下载的</param> /// <returns></returns> IEnumerator LoadAsycBundle(string urlname, string _realName, string _MainAboutName) { var bundleLoadRequest = AssetBundle.LoadFromFileAsync(urlname); string MainAboutName = _MainAboutName; string realName = _realName; yield return(bundleLoadRequest); var myLoadedAssetBundle = bundleLoadRequest.assetBundle; if (myLoadedAssetBundle != null) { if (AllAssetBundle.ContainsKey(realName)) { AllAssetBundle[realName] = myLoadedAssetBundle; } else { AllAssetBundle.Add(realName, myLoadedAssetBundle); } } if (AsycAssetBundleNeedLoad.ContainsKey(MainAboutName)) { List <string> lst = new List <string>(); AsycAssetBundleNeedLoad.TryGetValue(MainAboutName, out lst); if (lst.Contains(realName)) { lst.Remove(realName); } if (lst.Count == 0) { AsycAssetBundleNeedLoad.Remove(MainAboutName); LoadComplentBack cmback = null; if (AsycAssetBundleComPlentBack.ContainsKey(MainAboutName)) { AsycAssetBundleComPlentBack.TryGetValue(MainAboutName, out cmback); AsycAssetBundleComPlentBack.Remove(MainAboutName); } string curname = null; if (AsycAssetBundleCurName.ContainsKey(MainAboutName)) { AsycAssetBundleCurName.TryGetValue(MainAboutName, out curname); AsycAssetBundleCurName.Remove(MainAboutName); } if (cmback != null && curname != null) { if (AllAssetBundle.ContainsKey(MainAboutName)) { cmback(AllAssetBundle[MainAboutName].LoadAsset(curname)); } } } } }
public void LoadAsyc(string name, LoadComplentBack _lcb) { if (string.IsNullOrEmpty(name)) { return; } if (Util.buildBundle) { string[] tmpName = name.Split('/'); int tmpCount = tmpName.Length; string curName = tmpName[tmpCount - 1]; string bundleFristName = tmpName[0].ToLower() + "/" + tmpName[1].ToLower(); if (AsycAssetBundleNeedLoad == null) { AsycAssetBundleNeedLoad = new Dictionary <string, List <string> >(); } if (AsycAssetBundleCurName == null) { AsycAssetBundleCurName = new Dictionary <string, string>(); } if (AsycAssetBundleComPlentBack == null) { AsycAssetBundleComPlentBack = new Dictionary <string, LoadComplentBack>(); } if (AsycAssetBundleComPlentBack.ContainsKey(bundleFristName)) { Debug.LogError("正在异步加载中:"); return; } else { List <string> Ls = new List <string>(); Ls.Add(bundleFristName); AsycAssetBundleNeedLoad.Add(bundleFristName, Ls); AsycAssetBundleCurName.Add(bundleFristName, curName); AsycAssetBundleComPlentBack.Add(bundleFristName, _lcb); GetUIResAsyc(name); } } else { GameObject go = Resources.Load(name) as GameObject; _lcb(go); } }
public void GetUIResAsyc(string resName) { string[] tmpName = resName.Split('/'); int tmpCount = tmpName.Length; string curName = tmpName[tmpCount - 1]; string bundleFristName = tmpName[0].ToLower() + "/" + tmpName[1].ToLower(); if (!AllAssetBundle.ContainsKey(bundleFristName)) { string tmppath = Util.DataPath + bundleFristName + ".ld"; if (!File.Exists(tmppath)) { LoadComplentBack cmback = null; AsycAssetBundleComPlentBack.TryGetValue(bundleFristName, out cmback); if (cmback != null) { cmback(null); } AsycAssetBundleComPlentBack.Remove(bundleFristName); AsycAssetBundleNeedLoad.Remove(bundleFristName); AsycAssetBundleCurName.Remove(bundleFristName); } if (MainManiFest != null) { loadManifestDependenciesAsyc(bundleFristName + ".ld"); } StartCoroutine(LoadAsycBundle(tmppath, bundleFristName, bundleFristName)); } else { LoadComplentBack cmback = null; AsycAssetBundleComPlentBack.TryGetValue(bundleFristName, out cmback); if (cmback != null) { cmback(AllAssetBundle[bundleFristName].LoadAsset(curName)); } AsycAssetBundleComPlentBack.Remove(bundleFristName); AsycAssetBundleNeedLoad.Remove(bundleFristName); AsycAssetBundleCurName.Remove(bundleFristName); } }
public static void LoadGameObjectAsyc <T>(string name, T t, LoadComplentBack lcb) where T : BasePanel { if (Util.buildBundle) { ResourceHelper.GetInstance().LoadAsyc(name, (_go) => { GameObject go = Instantiate(_go) as GameObject; t = go.AddComponent <T>(); string[] strarr = name.Split('/'); t.PanelName = strarr[strarr.Length - 1]; t.InitPro(false); lcb(go); }); } else { GameObject go = Instantiate(ResourceHelper.GetInstance().Load(name)) as GameObject; t = go.AddComponent <T>(); string[] strarr = name.Split('/'); t.PanelName = strarr[strarr.Length - 1]; t.InitPro(false); lcb(go); } }