private IEnumerator IeLoadAsset(string resName, LoadderCallBack callBack, LoadderData data) { var boudleName = data == null ? resName : string.IsNullOrEmpty(data.assetBoudleName) ? resName : data.assetBoudleName; if (_objDic.ContainsKey(boudleName)) { var resNames = resName.Split('/'); if (callBack != null) { callBack(resName, _objDic[boudleName].LoadAsset(resNames[resNames.Length - 1]), data); } yield break; } resManagerState = ResManagerState.EAsyncLoadRes; if (_wwwList.Contains(boudleName)) { yield return(new WaitWhile(() => _wwwList.Contains(boudleName))); if (_objDic.ContainsKey(boudleName)) { var resNames = resName.Split('/'); if (callBack != null) { callBack(resName, _objDic[boudleName].LoadAsset(resNames[resNames.Length - 1]), data); } resManagerState = ResManagerState.EFree; yield break; } } _wwwList.Add(boudleName); yield return(LoadAllDependencies(boudleName)); var objwww = WWW.LoadFromCacheOrDownload(string.Format("file://{0}{1}.unity3d", ResManager.LocalAssetbundlePath, boudleName), _manifest.GetAssetBundleHash(string.Format("{0}.unity3d", boudleName)), 0); yield return(objwww); if (!string.IsNullOrEmpty(objwww.error)) { Debug.Log(objwww.error); if (callBack != null) { callBack(resName, null, data); } } else { _objDic.Add(boudleName, objwww.assetBundle); var resNames = resName.Split('/'); var obj = objwww.assetBundle.LoadAsset(resNames[resNames.Length - 1]); if (callBack != null) { callBack(resName, obj, data); } } _wwwList.Remove(boudleName); resManagerState = ResManagerState.EFree; }
public void Init(bool UseAssetBoudle = true, bool UpdateAssetBoudleVesion = true) { this.UseAssetBoudle = UseAssetBoudle; this.UpdateAssetBoudleVesion = UpdateAssetBoudleVesion; init = !UseAssetBoudle; if (!UseAssetBoudle) { return; } var sabServerPath = string.Format("{0}{1}", ServerAssetbundleAbsPath, "AssetBundles"); var sabLocalPath = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles"); if (UpdateAssetBoudleVesion) { var fileInfo = new FileInfo(sabLocalPath); if (fileInfo.Exists) { fileInfo.Delete(); } } resManagerState = ResManagerState.EDownABManifest; if (UpdateAssetBoudleVesion) { HttpManager.Instance.DownLoad(sabServerPath, sabLocalPath, OnDownLoadSAbCallBack); } else { OnDownLoadSAbCallBack(new HttpHelperRet(true, ""), null); } }
private void OnDownLoadSAbCallBack(HttpHelperRet ret, object data) { if (ret.isOk) { Game.Instance.StartCoroutine(CheckResVersion()); } else { resManagerState = ResManagerState.EError; init = true; if (GMManager.IsInEditor) { Debug.LogError(string.Format("{0}\nlog: {1}", ret.isOk, ret.log)); } } }
private void OnDownLoadAbCallBack(HttpHelperRet ret, object data) { if (GMManager.IsInEditor) { Debug.Log("已下载: " + ret.isOk + " " + ret.log); } if (!HttpManager.Instance.DownLoadEnd()) { return; } resManagerState = ResManagerState.EFree; var _cabPath = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles_old"); var _sabPath = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles"); var fileInfo = new FileInfo(_sabPath); fileInfo.CopyTo(_cabPath, true); init = true; }
private IEnumerator CheckResVersion() { resManagerState = ResManagerState.ECheckResVersion; var _cabPath = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles_old"); var _sabPath = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles"); var _cabwwwPath = string.Format("file://{0}", _cabPath); var _sabwwwPath = string.Format("file://{0}", _sabPath); if (!UpdateAssetBoudleVesion) { var fileInfo = new FileInfo(_sabPath); if (fileInfo.Exists) { fileInfo.CopyTo(_cabPath, true); } else { init = true; if (GMManager.IsInEditor) { Debug.LogError(string.Format("load '{0}' err\nlog: '{0}' no here !", _sabPath)); } yield break; } } AssetBundleManifest cabVersion = null; var updateList = new List <AssetBundleMotify>(); var www = new WWW(_sabwwwPath); yield return(www); if (!string.IsNullOrEmpty(www.error)) { init = true; if (GMManager.IsInEditor) { Debug.LogError(string.Format("load '{0}' err\nlog: {1}", _sabwwwPath, www.error)); } yield break; } _manifest = www.assetBundle.LoadAsset("AssetBundleManifest") as AssetBundleManifest; if (_manifest == null) { Debug.LogError("_manifest null"); yield break; } var sabBytes = www.bytes; www.assetBundle.Unload(false); www.Dispose(); var cabJson = new FileInfo(_cabPath); if (cabJson.Exists) { www = new WWW(_cabwwwPath); yield return(www); if (!string.IsNullOrEmpty(www.error)) { init = true; if (GMManager.IsInEditor) { Debug.LogError(string.Format("load '{0}' err\nlog: {1}", _cabwwwPath, www.error)); } yield break; } cabVersion = www.assetBundle.LoadAsset("AssetBundleManifest") as AssetBundleManifest; var cabBytes = www.bytes; www.assetBundle.Unload(false); www.Dispose(); if (cabBytes.SequenceEqual(sabBytes)) { resManagerState = ResManagerState.EFree; init = true; if (GMManager.IsInEditor) { Debug.Log("The same version!"); } yield break; } } updateList.Clear(); GetUpdateList(ref updateList, _manifest, cabVersion); if (GMManager.IsInEditor) { var log = "无更新资源!"; if (updateList.Count > 0) { log = "需要更新以下资源:"; foreach (var ab in updateList) { if (ab.add) { log += "\n更新: " + ab.name; } else { log += "\n删除: " + ab.name; } } } Debug.Log(log); } var delCount = 0; var downloadCount = 0; resManagerState = ResManagerState.EUpdateAB; while (updateList.Count > 0) { var item = updateList[0]; updateList.RemoveAt(0); if (item.add) { if (string.IsNullOrEmpty(item.name)) { continue; } downloadCount++; var sabServerPath = string.Format("{0}{1}", ServerAssetbundleAbsPath, item.name); var sabLocalPath = string.Format("{0}{1}", LocalAssetbundlePath, item.name); var fileInfo = new FileInfo(sabLocalPath); var mydir = fileInfo.Directory; if (!mydir.Exists) { mydir.Create(); } HttpManager.Instance.DownLoad(sabServerPath, sabLocalPath, OnDownLoadAbCallBack); } else { delCount++; var filePath = string.Format("{0}{1}", LocalAssetbundlePath, item.name); var fileInfo = new FileInfo(filePath); if (fileInfo.Exists) { fileInfo.Delete(); } } } updateList = null; if (downloadCount == 0) { OnDownLoadAbCallBack(new HttpHelperRet(true, ""), null); } }