Beispiel #1
0
        public override IEnumerator LoadResource(IInfoData iData, LoadBundleFinish delFinish, object param1, object param2)
        {
            UIInfoData infoData = iData as UIInfoData;

            if (infoData == null)
            {
                yield break;
            }

#if UNITY_EDITOR
            if (PlayerSetting.SimulateAssetBundleInEditor)
            {
                string     assertMainPath = GetBundleLoadUrl(infoData.path, infoData.name + ".prefab");
                GameObject objectRet      = AssetDatabase.LoadAssetAtPath <GameObject>(assertMainPath);

                if (objectRet == null)
                {
                    Debug.Log(infoData.name);
                }
                delFinish(infoData, objectRet, param1, param2);
                yield break;
            }
#endif
            yield return(LoadManifest());

            yield return(LoadCommonUI());

            string bundleName = infoData.GetBundleName().ToLower();

            yield return(LoadPrefabUI(bundleName, true, true));

            yield return(LoadGameObject(bundleName, infoData, delFinish, param1, param2));

            yield return(null);
        }
Beispiel #2
0
        public IEnumerator LoadGameObject(string bundleName, UIInfoData infoData,
                                          LoadBundleFinish delFinish, object param1, object param2, bool isAync = true)
        {
            GameObject retObj = null;

            if (m_UIBundleCache.ContainsKey(bundleName))
            {
                AssetBundle bundle = m_UIBundleCache[bundleName].UICachedAssetBundle;
                if (isAync)
                {
                    AssetBundleRequest req = bundle.LoadAssetAsync(infoData.name, typeof(GameObject));
                    yield return(req);

                    retObj = req.asset as GameObject;
                }
                else
                {
                    retObj = bundle.LoadAsset(infoData.name, typeof(GameObject)) as GameObject;
                }

                if (null != delFinish)
                {
                    delFinish(infoData, retObj, param1, param2);
                }
            }
        }
Beispiel #3
0
        public override IEnumerator LoadResource(IInfoData iData, LoadBundleFinish delFinish, object param1, object param2)
        {
            ModelInfoData infoData = iData as ModelInfoData;

            if (infoData == null)
            {
                yield break;
            }

#if UNITY_EDITOR
            if (PlayerSetting.SimulateAssetBundleInEditor)
            {
                if (null != delFinish)
                {
                    string     assetPath = GetBundleLoadUrl(PathModelPrefab, infoData.name.ToLower(), ".prefab");
                    GameObject gb        = AssetDatabase.LoadAssetAtPath <GameObject>(assetPath);
                    delFinish(infoData, gb, param1, param2);
                }

                yield break;
            }
#endif

            ///这里充当加载标识的作用,表示如果当前已经在加载这个资源了,则等待直到资源加载完成
            while (m_dicSingleBundleRef.Contains(infoData.GetBundleName()))
            {
                yield return(0);
            }

            ///添加对应的引用计数
            if (!m_dicSingleBundleRef.Contains(infoData.GetBundleName()))
            {
                m_dicSingleBundleRef.Add(infoData.GetBundleName());
            }

            if (LoadFromCache(infoData, delFinish, param1, param2))
            {
                yield break;
            }

            string assetBundleName = infoData.name.ToLower();

            string loadPath = GetBundleLoadUrl(PathModelPrefab, assetBundleName, m_bundleExt);

            AssetBundleCreateRequest req = GetBundleRequest(loadPath);
            yield return(req);

            yield return(ProcessLoad(req.assetBundle, infoData, delFinish, param1, param2));
        }
Beispiel #4
0
        private static bool LoadFromCache(ModelInfoData infoData, LoadBundleFinish delFinish, object param1, object param2)
        {
            string assetBundleName = infoData.GetBundleName();

            if (m_dicSingleBundleCache.ContainsKey(assetBundleName))
            {
                ///添加对应的引用计数
                //  if (!m_dicSingleBundleRef.Contains(assetBundleName))
                {
                    //     m_dicSingleBundleRef.Add(assetBundleName);
                }

                GameObject modelObject = m_dicSingleBundleCache[assetBundleName].modelOrEffect;

                if (null != delFinish)
                {
                    delFinish(infoData, modelObject, param1, param2);
                }

                return(true);
            }
            return(false);
        }
Beispiel #5
0
        private static IEnumerator ProcessLoad(AssetBundle bundle, ModelInfoData infoData,
                                               LoadBundleFinish delFinish, object param1, object param2, bool isAync = true)
        {
            if (null == bundle)
            {
                yield break;
            }

            AssetBundleRequest req = bundle.LoadAssetAsync(infoData.GetBundleName(), typeof(GameObject));

            yield return(req);

            if (m_dicSingleBundleRef.Contains(infoData.GetBundleName()))
            {
                m_dicSingleBundleRef.Remove(infoData.GetBundleName());
            }

            GameObject retObj = req.asset as GameObject;

            if (null != delFinish)
            {
                delFinish(infoData, retObj, param1, param2);
            }
        }
Beispiel #6
0
    public static IEnumerator LoadUI(UIPathData uiData, LoadBundleFinish delFinish, object param1, object param2)
    {
        if (m_BundleListFont.Count == 0)
        {
            WWW www = WWW.LoadFromCacheOrDownload(GetBundleLoadUrl(BundleManager.PathUICommon, BundleManager.UIFontName), m_cacheResVersion);
            yield return(www);

            if (null != www.assetBundle)
            {
                www.assetBundle.LoadAllAssets();
                m_BundleListFont.Add(www.assetBundle);
            }
        }

        // 加载通用资源
        if (m_BundleListCommon.Count == 0)
        {
            WWW www = WWW.LoadFromCacheOrDownload(GetBundleLoadUrl(BundleManager.PathUICommon, BundleManager.UICommonName), m_cacheResVersion);
            yield return(www);

            if (null != www.assetBundle)
            {
                www.assetBundle.LoadAllAssets();
                m_BundleListCommon.Add(www.assetBundle);
            }
        }

        // 加载Login资源
        if (GameManager.gameManager.OnLineState == false)
        {
            if (m_BundleListMainUI.Count == 0)
            {
                WWW www = WWW.LoadFromCacheOrDownload(GetBundleLoadUrl(BundleManager.PathUICommon, BundleManager.UIMainName), m_cacheResVersion);
                yield return(www);

                if (null != www.assetBundle)
                {
                    www.assetBundle.LoadAllAssets();
                    m_BundleListMainUI.Add(www.assetBundle);
                }
            }
        }
        else
        {
            if (GameManager.gameManager.RunningScene == (int)Games.GlobeDefine.GameDefine_Globe.SCENE_DEFINE.SCENE_LOGIN)
            {
                if (m_BundleListLoginUI.Count == 0)
                {
                    WWW www = WWW.LoadFromCacheOrDownload(GetBundleLoadUrl(BundleManager.PathUICommon, BundleManager.UILoginName), m_cacheResVersion);
                    yield return(www);

                    if (null != www.assetBundle)
                    {
                        www.assetBundle.LoadAllAssets();
                        m_BundleListLoginUI.Add(www.assetBundle);
                    }
                }
            }
            else
            {
                if (m_BundleListMainUI.Count == 0)
                {
                    WWW www = WWW.LoadFromCacheOrDownload(GetBundleLoadUrl(BundleManager.PathUICommon, BundleManager.UIMainName), m_cacheResVersion);
                    yield return(www);

                    if (null != www.assetBundle)
                    {
                        www.assetBundle.LoadAllAssets();
                        m_BundleListMainUI.Add(www.assetBundle);
                    }
                }
            }
        }

        // 加载当前UI
        GameObject retObj = null;
        WWW        wwwUI;

        if (uiData.uiGroupName != null)
        {
            // 分组缓存,不释放
            while (m_BundleUILoadingList.Contains(uiData.uiGroupName))
            {
                yield return(null);
            }
            m_BundleUILoadingList.Add(uiData.uiGroupName);

            if (m_BundleDicUIGroup.ContainsKey(uiData.uiGroupName))
            {
                retObj = m_BundleDicUIGroup[uiData.uiGroupName].LoadAsset(uiData.name, typeof(GameObject)) as GameObject;
            }
            else
            {
                LogModule.DebugLog("load asset :" + uiData.name + "UI gropu:" + uiData.uiGroupName);
                wwwUI = WWW.LoadFromCacheOrDownload(GetBundleLoadUrl(BundleManager.PathUIPrefab, uiData.uiGroupName + ".data"), m_cacheResVersion);
                yield return(wwwUI);

                if (null != wwwUI.assetBundle)
                {
                    retObj = wwwUI.assetBundle.LoadAsset(uiData.name, typeof(GameObject)) as GameObject;
                    m_BundleDicUIGroup.Add(uiData.uiGroupName, wwwUI.assetBundle);
                }
                else
                {
                    LogModule.ErrorLog("load assetbundle none :" + uiData.uiGroupName);
                }
            }

            m_BundleUILoadingList.Remove(uiData.uiGroupName);
        }
        else if (uiData.uiType == UIPathData.UIType.TYPE_BASE || uiData.uiType == UIPathData.UIType.TYPE_ITEM || uiData.uiType == UIPathData.UIType.TYPE_MESSAGE)
        {
            while (m_BundleUILoadingList.Contains(uiData.path))
            {
                yield return(null);
            }
            m_BundleUILoadingList.Add(uiData.path);

#if UNITY_WP8
            string _url = GetBundleLoadUrl(BundleManager.PathUIPrefab, uiData.name + ".data");

            if (m_bobDownloadingWWWs.Contains(_url))
            {
                yield break;
            }
            if (m_UIBundleList.ContainsKey(_url))
            {
                retObj = m_UIBundleList[_url].LoadAsset(uiData.name, typeof(GameObject)) as GameObject;
            }
            else
            {
                wwwUI = new WWW(_url);
                m_bobDownloadingWWWs.Add(_url);
                yield return(wwwUI);

                m_bobDownloadingWWWs.Remove(_url);
                if (null != wwwUI.assetBundle)
                {
                    retObj = wwwUI.assetBundle.LoadAsset(uiData.name, typeof(GameObject)) as GameObject;
                    m_UIBundleList.Add(_url, wwwUI.assetBundle);
                }
                else
                {
                    LogModule.ErrorLog("load assetbundle none :" + uiData.uiGroupName);
                }
            }
#else
            wwwUI = WWW.LoadFromCacheOrDownload(GetBundleLoadUrl(BundleManager.PathUIPrefab, uiData.name + ".data"), m_cacheResVersion);
            yield return(wwwUI);

            if (null != wwwUI.assetBundle)
            {
                retObj = wwwUI.assetBundle.LoadAsset(uiData.name, typeof(GameObject)) as GameObject;
                CacheBundle(wwwUI);
            }
            else
            {
                LogModule.ErrorLog("load assetbundle none :" + uiData.uiGroupName);
            }
            m_BundleUILoadingList.Remove(uiData.path);
#endif
        }
        else
        {
            while (m_BundleUILoadingList.Contains(uiData.path))
            {
                yield return(null);
            }
            m_BundleUILoadingList.Add(uiData.path);
#if UNITY_WP8
            string _url = GetBundleLoadUrl(BundleManager.PathUIPrefab, uiData.name + ".data");

            if (m_bobDownloadingWWWs.Contains(_url))
            {
                yield break;
            }
            if (m_UIBundleList.ContainsKey(_url))
            {
                retObj = m_UIBundleList[_url].LoadAsset(uiData.name, typeof(GameObject)) as GameObject;
            }
            else
            {
                wwwUI = new WWW(_url);
                m_bobDownloadingWWWs.Add(_url);
                yield return(wwwUI);

                m_bobDownloadingWWWs.Remove(_url);
                if (null != wwwUI.assetBundle)
                {
                    retObj = wwwUI.assetBundle.LoadAsset(uiData.name, typeof(GameObject)) as GameObject;
                    m_UIBundleList.Add(_url, wwwUI.assetBundle);
                }
                else
                {
                    LogModule.ErrorLog("load assetbundle none :" + uiData.uiGroupName);
                }
            }
#else
            if (m_BundleDicUIRef.ContainsKey(uiData.name))
            {
                LogModule.ErrorLog("load ui data fail: already load a same bundle " + uiData.name);
            }
            else
            {
                LogModule.DebugLog("load asset :" + uiData.name + "UI gropu:" + uiData.uiGroupName);
                wwwUI = WWW.LoadFromCacheOrDownload(GetBundleLoadUrl(BundleManager.PathUIPrefab, uiData.name + ".data"), m_cacheResVersion);
                yield return(wwwUI);

                if (null != wwwUI.assetBundle)
                {
                    retObj = wwwUI.assetBundle.LoadAsset(uiData.name, typeof(GameObject)) as GameObject;
                    CacheBundle(wwwUI);
                    //m_BundleDicUIRef.Add(uiData.name, wwwUI.assetBundle);
                }
                else
                {
                    LogModule.ErrorLog("load assetbundle none :" + uiData.uiGroupName);
                }
            }
            m_BundleUILoadingList.Remove(uiData.path);
#endif
        }

        if (null != delFinish)
        {
            delFinish(uiData, retObj, param1, param2);
        }
    }
Beispiel #7
0
 public abstract IEnumerator LoadResource(IInfoData infoData,
                                          LoadBundleFinish delFinish,
                                          object param1,
                                          object param2);