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); }
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); } } }
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)); }
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); }
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); } }
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); } }
public abstract IEnumerator LoadResource(IInfoData infoData, LoadBundleFinish delFinish, object param1, object param2);