Пример #1
0
    /// <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));
                    }
                }
            }
        }
    }
Пример #2
0
    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);
        }
    }
Пример #3
0
    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);
        }
    }
Пример #4
0
 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);
     }
 }